diff --git a/README.md b/README.md
index 5670a90c9f95ce5d7290d3c9c884b3c943b4459d..0336b9f6cdb9562ccff27d73f058d6293604de6b 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# TeraFlow OS SDN Controller
+# TeraFlowSDN Controller
 
 [Teraflow H2020 project](https://teraflow-h2020.eu/) - Secured autonomic traffic management for a Tera of SDN Flows
 
@@ -7,13 +7,4 @@ Branch "master" : [![pipeline status](https://gitlab.com/teraflow-h2020/controll
 Branch "develop" : [![pipeline status](https://gitlab.com/teraflow-h2020/controller/badges/develop/pipeline.svg)](https://gitlab.com/teraflow-h2020/controller/-/commits/develop) [![coverage report](https://gitlab.com/teraflow-h2020/controller/badges/develop/coverage.svg)](https://gitlab.com/teraflow-h2020/controller/-/commits/develop)
 
 # Installation Instructions
-To install TeraFlow OS SDN Controller in your local Kubernetes deployment, we assume you deployed Kubernetes following the instructions provided in [Wiki: Installing Kubernetes on your Linux machine](https://gitlab.com/teraflow-h2020/controller/-/wikis/Installing-Kubernetes-on-your-Linux-machine).
-
-Then, follow the instructions in [Wiki: Deploying a TeraFlow OS test instance](https://gitlab.com/teraflow-h2020/controller/-/wikis/Deploying-a-TeraFlow-OS-test-instance) to deploy your instance of TeraFlow OS.
-
-# Functional Tests
-A functional test has been defined to enable experimentation with the TeraFlow OS:
-
-__Important:__ The OpenConfigDriver, the P4Driver, and the TrandportApiDriver have to be considered as experimental. The configuration and monitoring capabilities they support are limited or partially implemented. Use them with care.
-
-[Demo at OFC'22 (Bootstrap devices, Manage L3VPN services, Monitor Device Endpoints)](./src/tests/ofc22)
+For devel and upcoming release 2.0, we have prepared the following tutorial: [TeraFlowSDN tutorial](https://gitlab.com/teraflow-h2020/controller/-/tree/develop/tutorial).
diff --git a/common_requirements.in b/common_requirements.in
index 8a027cfbd1ecf8bf4adc535dd9d5e3a769a2f2f8..772c1115d857664ed113007b89a6f7f9d9c48b99 100644
--- a/common_requirements.in
+++ b/common_requirements.in
@@ -6,3 +6,4 @@ prometheus-client==0.13.0
 protobuf==3.20.*
 pytest==6.2.5
 pytest-benchmark==3.4.1
+python-dateutil==2.8.2
diff --git a/manifests/monitoringservice.yaml b/manifests/monitoringservice.yaml
index e6fa36d1a68e4e0f85776b511631b0b619ec100c..7f0bee9efc68e66c72487624241e763dccb2fc76 100644
--- a/manifests/monitoringservice.yaml
+++ b/manifests/monitoringservice.yaml
@@ -29,19 +29,23 @@ spec:
       terminationGracePeriodSeconds: 5
       restartPolicy: Always
       containers:
-      - name: influxdb
-        image: influxdb:1.8
+      - name: metricsdb
+        image: questdb/questdb
         ports:
-        - containerPort: 8086
-        envFrom:
-          - secretRef:
-              name: influxdb-secrets
+        - containerPort: 9000
+        - containerPort: 9009
+        - containerPort: 9003
+        env:
+        - name: QDB_CAIRO_COMMIT_LAG
+          value: "1000"
+        - name: QDB_CAIRO_MAX_UNCOMMITTED_ROWS
+          value: "100000"
         readinessProbe:
           exec:
-            command: ["curl", "-XGET", "localhost:8086/health"]
+            command: ["curl", "-XGET", "localhost:9000"]
         livenessProbe:
           exec:
-            command: ["curl", "-XGET", "localhost:8086/health"]
+            command: ["curl", "-XGET", "localhost:9003/metrics"]
         resources:
           requests:
             cpu: 250m
@@ -54,9 +58,15 @@ spec:
         imagePullPolicy: Always
         ports:
         - containerPort: 7070
-        envFrom:
-          - secretRef:
-              name: monitoring-secrets
+        env:
+        - name: METRICSDB_HOSTNAME
+          value: "localhost"
+        - name: METRICSDB_ILP_PORT
+          value: "9009"
+        - name: METRICSDB_REST_PORT
+          value: "9000"
+        - name: METRICSDB_TABLE
+          value: "monitoring"
         readinessProbe:
           exec:
             command: ["/bin/grpc_health_probe", "-addr=:7070"]
@@ -70,6 +80,7 @@ spec:
           limits:
             cpu: 700m
             memory: 1024Mi
+
 ---
 apiVersion: v1
 kind: Service
@@ -84,7 +95,7 @@ spec:
     protocol: TCP
     port: 7070
     targetPort: 7070
-  - name: influxdb
+  - name: questdb
     protocol: TCP
-    port: 8086
-    targetPort: 8086
+    port: 9000
+    targetPort: 9000
\ No newline at end of file
diff --git a/proto/automation.proto b/proto/automation.proto
index f41bef9e28588fbd2a0acf416d347eb530c48df0..9297236766a28878a5f0c0de6a4aeae0487d330a 100644
--- a/proto/automation.proto
+++ b/proto/automation.proto
@@ -21,7 +21,7 @@ service AutomationService {
   rpc ZtpGetDeviceRole(DeviceRoleId) returns (DeviceRole) {}
   rpc ZtpGetDeviceRolesByDeviceId(context.DeviceId) returns (DeviceRoleList) {}
   rpc ZtpAdd(DeviceRole) returns (DeviceRoleState) {}
-  rpc ZtpUpdate(DeviceRole) returns (DeviceRoleState) {}
+  rpc ZtpUpdate(DeviceRoleConfig) returns (DeviceRoleState) {}
   rpc ZtpDelete(DeviceRole) returns (DeviceRoleState) {}
   rpc ZtpDeleteAll(context.Empty) returns (DeviceDeletionResult) {}
 }
@@ -43,6 +43,11 @@ message DeviceRole {
   DeviceRoleType devRoleType = 2;
 }
 
+message DeviceRoleConfig {
+  DeviceRole devRole = 1;
+  context.DeviceConfig devConfig = 2;
+}
+
 message DeviceRoleList {
   repeated DeviceRole devRole = 1;
 }
diff --git a/proto/context.proto b/proto/context.proto
index 944cc0ef59d76de7bffb9c181a0ee61af61e73e3..866876175f108c056f7e35c6457a1bf48a226a9c 100644
--- a/proto/context.proto
+++ b/proto/context.proto
@@ -280,8 +280,9 @@ message Slice {
   repeated ServiceId slice_service_ids = 4;
   repeated SliceId slice_subslice_ids = 5;
   SliceStatus slice_status = 6;
-  SliceOwner slice_owner = 7;
-  Timestamp timestamp = 8;
+  SliceConfig slice_config = 7;
+  SliceOwner slice_owner = 8;
+  Timestamp timestamp = 9;
 }
 
 message SliceOwner {
@@ -302,6 +303,10 @@ message SliceStatus {
   SliceStatusEnum slice_status = 1;
 }
 
+message SliceConfig {
+  repeated ConfigRule config_rules = 1;
+}
+
 message SliceIdList {
   repeated SliceId slice_ids = 1;
 }
@@ -446,6 +451,11 @@ message Constraint_EndPointLocation {
   Location location = 2;
 }
 
+message Constraint_EndPointPriority {
+  EndPointId endpoint_id = 1;
+  uint32 priority = 2;
+}
+
 message Constraint_SLA_Latency {
   float e2e_latency_ms = 1;
 }
@@ -472,7 +482,7 @@ enum IsolationLevelEnum {
 }
 
 message Constraint_SLA_Isolation_level {
-  IsolationLevelEnum isolation_level = 1;
+  repeated IsolationLevelEnum isolation_level = 1;
 }
 
 message Constraint {
@@ -480,10 +490,11 @@ message Constraint {
     Constraint_Custom custom = 1;
     Constraint_Schedule schedule = 2;
     Constraint_EndPointLocation endpoint_location = 3;
-    Constraint_SLA_Capacity sla_capacity = 4;
-    Constraint_SLA_Latency sla_latency = 5;
-    Constraint_SLA_Availability sla_availability = 6;
-    Constraint_SLA_Isolation_level sla_isolation = 7;
+    Constraint_EndPointPriority endpoint_priority = 4;
+    Constraint_SLA_Capacity sla_capacity = 5;
+    Constraint_SLA_Latency sla_latency = 6;
+    Constraint_SLA_Availability sla_availability = 7;
+    Constraint_SLA_Isolation_level sla_isolation = 8;
   }
 }
 
diff --git a/proto/monitoring.proto b/proto/monitoring.proto
index 2c7b98d2ca3392906e0f42896907bb887b45e80b..8b83afa47b49c130d37dcbcc1024f079ebc2a2fe 100644
--- a/proto/monitoring.proto
+++ b/proto/monitoring.proto
@@ -19,56 +19,35 @@ import "context.proto";
 import "kpi_sample_types.proto";
 
 service MonitoringService {
-  rpc CreateKpi                (KpiDescriptor        )     returns (KpiId            ) {}
-  rpc EditKpiDescriptor        (EditedKpiDescriptor  )     returns (context.Empty    ) {}
-  rpc DeleteKpi                (KpiId                )     returns (context.Empty    ) {}
-  rpc GetKpiDescriptorList     (context.Empty        )     returns (KpiDescriptorList) {}
-  rpc CreateBundleKpi          (BundleKpiDescriptor  )     returns (KpiId            ) {}
-  rpc GetKpiDescriptor         (KpiId                )     returns (KpiDescriptor    ) {}
-  rpc IncludeKpi               (Kpi                  )     returns (context.Empty    ) {}
-  rpc MonitorKpi               (MonitorKpiRequest    )     returns (context.Empty    ) {}
-  rpc QueryKpiData             (KpiQuery             )     returns (KpiList          ) {}
-  rpc SubscribeKpi             (SubsDescriptor       )     returns (stream KpiList   ) {}
-  rpc GetSubsDescriptor        (SubscriptionID       )     returns (SubsDescriptor   ) {}
-  rpc GetSubscriptions         (context.Empty        )     returns (SubsIDList       ) {}
-  rpc EditKpiSubscription      (SubsDescriptor       )     returns (context.Empty    ) {}
-  rpc CreateKpiAlarm           (AlarmDescriptor      )     returns ( AlarmID ) {}
-  rpc EditKpiAlarm             (AlarmDescriptor      )     returns (context.Empty    ) {}
-  rpc GetAlarms                (context.Empty        )     returns (AlarmIDList      ) {}
-  rpc GetAlarmDescriptor       (AlarmID              )     returns (AlarmDescriptor  ) {}
-  rpc GetAlarmResponseStream   (AlarmID              )     returns (stream AlarmResponse ) {}
-  //  rpc GetStreamKpi            (KpiId                )     returns (stream Kpi       ) {}
-  //  rpc GetInstantKpi           (KpiId                )     returns (KpiList          ) {}
+  rpc SetKpi                (KpiDescriptor      ) returns (KpiId               ) {}
+  rpc DeleteKpi             (KpiId              ) returns (context.Empty       ) {}
+  rpc GetKpiDescriptor      (KpiId              ) returns (KpiDescriptor       ) {}
+  rpc GetKpiDescriptorList  (context.Empty      ) returns (KpiDescriptorList   ) {}
+  rpc IncludeKpi            (Kpi                ) returns (context.Empty       ) {}
+  rpc MonitorKpi            (MonitorKpiRequest  ) returns (context.Empty       ) {}
+  rpc QueryKpiData          (KpiQuery           ) returns (KpiList             ) {}
+  rpc SetKpiSubscription    (SubsDescriptor     ) returns (stream KpiList      ) {}
+  rpc GetSubsDescriptor     (SubscriptionID     ) returns (SubsDescriptor      ) {}
+  rpc GetSubscriptions      (context.Empty      ) returns (SubsIDList          ) {}
+  rpc DeleteSubscription    (SubscriptionID     ) returns (context.Empty       ) {}
+  rpc SetKpiAlarm           (AlarmDescriptor    ) returns (AlarmID             ) {}
+  rpc GetAlarms             (context.Empty      ) returns (AlarmIDList         ) {}
+  rpc GetAlarmDescriptor    (AlarmID            ) returns (AlarmDescriptor     ) {}
+  rpc GetAlarmResponseStream(AlarmSubscription  ) returns (stream AlarmResponse) {}
+  rpc DeleteAlarm           (AlarmID            ) returns (context.Empty       ) {}
+  rpc GetStreamKpi          (KpiId              ) returns (stream Kpi          ) {}
+  rpc GetInstantKpi         (KpiId              ) returns (KpiList             ) {}
 }
 
 message KpiDescriptor {
-  string kpi_description                          = 1;
-  kpi_sample_types.KpiSampleType kpi_sample_type  = 2;
-  context.DeviceId device_id                      = 3;
-  context.EndPointId endpoint_id                  = 4;
-  context.ServiceId  service_id                   = 5;
-  context.SliceId    slice_id                     = 6;
-}
-
-message BundleKpiDescriptor {
-  string kpi_description                          = 1;
-  repeated KpiId kpi_id_list                      = 2;
-  kpi_sample_types.KpiSampleType kpi_sample_type  = 3;
-  context.DeviceId device_id                      = 4;
-  context.EndPointId endpoint_id                  = 5;
-  context.ServiceId  service_id                   = 6;
-  context.SliceId    slice_id                     = 7;
-}
-
-message EditedKpiDescriptor {
-  KpiId kpi_id                                    = 1;
-  string kpi_description                          = 2;
-  repeated KpiId kpi_id_list                      = 3;
-  kpi_sample_types.KpiSampleType kpi_sample_type  = 4;
-  context.DeviceId device_id                      = 5;
-  context.EndPointId endpoint_id                  = 6;
-  context.ServiceId  service_id                   = 7;
-  context.SliceId    slice_id                     = 8;
+  KpiId                          kpi_id          = 1;
+  string                         kpi_description = 2;
+  repeated KpiId                 kpi_id_list     = 3;
+  kpi_sample_types.KpiSampleType kpi_sample_type = 4;
+  context.DeviceId               device_id       = 5;
+  context.EndPointId             endpoint_id     = 6;
+  context.ServiceId              service_id      = 7;
+  context.SliceId                slice_id        = 8;
 }
 
 message MonitorKpiRequest {
@@ -79,12 +58,12 @@ message MonitorKpiRequest {
 }
 
 message KpiQuery {
-  repeated KpiId kpi_id     = 1;
-  float monitoring_window_s = 2;
-  float sampling_rate_s     = 3;
-  uint32 last_n_samples     = 4;  // used when you want something like "get the last N many samples
-  string start_date         = 5;  // used when you want something like "get the samples since X date/time"
-  string end_date           = 6;  // used when you want something like "get the samples until X date/time"
+  repeated KpiId    kpi_id              = 1;
+  float             monitoring_window_s = 2;
+  float             sampling_rate_s     = 3;
+  uint32            last_n_samples      = 4;  // used when you want something like "get the last N many samples
+  context.Timestamp start_timestamp     = 5;  // used when you want something like "get the samples since X date/time"
+  context.Timestamp end_timestamp       = 6;  // used when you want something like "get the samples until X date/time"
   // Pending add field to reflect Available Device Protocols
 }
 
@@ -93,39 +72,47 @@ message KpiId {
 }
 
 message Kpi {
-  KpiId kpi_id        = 1;
-  string timestamp    = 2;
-  KpiValue kpi_value  = 3;
+  KpiId             kpi_id    = 1;
+  context.Timestamp timestamp = 2;
+  KpiValue          kpi_value = 3;
 }
 
 message KpiValueRange {
-  KpiValue kpiMinValue = 1;
-  KpiValue kpiMaxValue = 2;
+  KpiValue  kpiMinValue     = 1;
+  KpiValue  kpiMaxValue     = 2;
+  bool      inRange         = 3;  // by default True
+  bool      includeMinValue = 4;  // False is outside the interval
+  bool      includeMaxValue = 5;  // False is outside the interval
 }
 
 message KpiValue {
   oneof value {
-    uint32 intVal     = 1;
-    float floatVal    = 2;
-    string stringVal  = 3;
-    bool boolVal      = 4;
+    int32  int32Val  = 1;
+    uint32 uint32Val = 2;
+    int64  int64Val  = 3;
+    uint64 uint64Val = 4;
+    float  floatVal  = 5;
+    string stringVal = 6;
+    bool   boolVal   = 7;
   }
 }
 
+
 message KpiList {
-    repeated Kpi kpi_list = 1;
+  repeated Kpi kpi_list = 1;
 }
 
 message KpiDescriptorList {
-    repeated KpiDescriptor kpi_descriptor_list = 1;
+  repeated KpiDescriptor kpi_descriptor_list = 1;
 }
 
 message SubsDescriptor{
-  KpiId kpi_id              = 1;
-  float sampling_duration_s = 2;
-  float sampling_interval_s = 3;
-  string start_date         = 4;  // used when you want something like "get the samples since X date/time"
-  string end_date           = 5;  // used when you want something like "get the samples until X date/time"
+  SubscriptionID    subs_id             = 1;
+  KpiId             kpi_id              = 2;
+  float             sampling_duration_s = 3;
+  float             sampling_interval_s = 4;
+  context.Timestamp start_timestamp     = 5;  // used when you want something like "get the samples since X date/time"
+  context.Timestamp end_timestamp       = 6;  // used when you want something like "get the samples until X date/time"
   // Pending add field to reflect Available Device Protocols
 }
 
@@ -134,30 +121,38 @@ message SubscriptionID {
 }
 
 message SubsResponse {
-  SubscriptionID subs_id    = 1;
+  SubscriptionID   subs_id  = 1;
   repeated KpiList kpi_list = 2;
 }
 
 message SubsIDList {
-    repeated SubscriptionID subs_list = 1;
+  repeated SubscriptionID subs_list = 1;
 }
 
 message AlarmDescriptor {
-  string alarm_description      = 1;
-  string name                   = 2;
-  KpiId kpi_id                  = 3;
-  KpiValueRange kpi_value_range = 4;
-  string timestamp              = 5;
+  AlarmID                     alarm_id              = 1;
+  string                      alarm_description     = 2;
+  string                      name                  = 3;
+  repeated KpiId              kpi_id                = 4;
+  repeated KpiValueRange      kpi_value_range       = 5;
+  context.Timestamp           timestamp             = 6;
 }
 
 message AlarmID{
   context.Uuid alarm_id = 1;
 }
 
+message AlarmSubscription{
+  AlarmID alarmID                   = 1;
+  float   subscription_timeout_s    = 2;
+  float   subscription_frequency_ms = 3;
+}
+
 message AlarmResponse {
-  AlarmID alarm_id    = 1;
-  string text         = 2;
-  KpiValue kpi_value  = 3;
+  AlarmID           alarm_id  = 1;
+  string            text      = 2;
+  KpiValue          kpi_value = 3;
+  context.Timestamp timestamp = 4;
 }
 
 message AlarmIDList {
diff --git a/proto/te.proto b/proto/te.proto
index f85f94f48322d85e2c6bd7e667f7dfc9cb2febda..d639cb7f45f682d3e95d77e8b6d10d404ee51b9f 100644
--- a/proto/te.proto
+++ b/proto/te.proto
@@ -18,7 +18,7 @@ package te;
 import "context.proto";
 
 service TEService {
-  rpc RequestLSP (context.Service) returns (context.ServiceStatus) {}
+  rpc RequestLSP(context.Service  ) returns (context.ServiceStatus) {}
   rpc UpdateLSP (context.ServiceId) returns (context.ServiceStatus) {}
-  rpc DeleteLSP (context.ServiceId) returns (context.Empty) {}
+  rpc DeleteLSP (context.ServiceId) returns (context.Empty        ) {}
 }
diff --git a/scripts/run_tests_locally-context.sh b/scripts/run_tests_locally-context.sh
index 9e5ac4b92b5d55509173b23f0896cb108bdd3a1e..a9e601208aa9259219708a5e1ca770232e44faa6 100755
--- a/scripts/run_tests_locally-context.sh
+++ b/scripts/run_tests_locally-context.sh
@@ -22,6 +22,7 @@ RCFILE=$PROJECTDIR/coverage/.coveragerc
 K8S_NAMESPACE="tf-dev"
 K8S_HOSTNAME="kubernetes-master"
 
+kubectl --namespace $K8S_NAMESPACE expose deployment contextservice --port=6379 --name=redis-tests --type=NodePort
 export REDIS_SERVICE_HOST=$(kubectl get node $K8S_HOSTNAME -o 'jsonpath={.status.addresses[?(@.type=="InternalIP")].address}')
 export REDIS_SERVICE_PORT=$(kubectl get service redis-tests --namespace $K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==6379)].nodePort}')
 
diff --git a/src/automation/src/main/java/eu/teraflow/automation/AutomationGatewayImpl.java b/src/automation/src/main/java/eu/teraflow/automation/AutomationGatewayImpl.java
index c160387c3e3448f29d01a185afc31127b025c2b6..6d672fdea2c3e97f9f2a50c7efa8d77c05532357 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/AutomationGatewayImpl.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/AutomationGatewayImpl.java
@@ -17,9 +17,12 @@
 package eu.teraflow.automation;
 
 import automation.Automation;
+import automation.Automation.DeviceRoleConfig;
+import automation.Automation.DeviceRoleState;
 import context.ContextOuterClass;
 import eu.teraflow.automation.context.model.Device;
 import eu.teraflow.automation.model.DeviceRoleId;
+import eu.teraflow.automation.model.DeviceState;
 import io.quarkus.grpc.GrpcService;
 import io.smallrye.mutiny.Uni;
 import javax.inject.Inject;
@@ -56,17 +59,19 @@ public class AutomationGatewayImpl implements AutomationGateway {
         return automationService
                 .addDevice(deviceId)
                 .onItem()
-                .transform(device -> transformToDeviceRoleState(device, devRoleId));
+                .transform(device -> transformToDeviceRoleState(device, devRoleId, DeviceState.CREATED));
     }
 
     @Override
-    public Uni<Automation.DeviceRoleState> ztpUpdate(Automation.DeviceRole request) {
-        return Uni.createFrom()
-                .item(
-                        () ->
-                                Automation.DeviceRoleState.newBuilder()
-                                        .setDevRoleId(request.getDevRoleId())
-                                        .build());
+    public Uni<DeviceRoleState> ztpUpdate(DeviceRoleConfig request) {
+        final var devRoleId = request.getDevRole().getDevRoleId().getDevRoleId().getUuid();
+        final var deviceId = serializer.deserialize(request.getDevRole().getDevRoleId().getDevId());
+        final var deviceConfig = serializer.deserialize(request.getDevConfig());
+
+        return automationService
+                .updateDevice(deviceId, deviceConfig)
+                .onItem()
+                .transform(device -> transformToDeviceRoleState(device, devRoleId, DeviceState.UPDATED));
     }
 
     @Override
@@ -84,16 +89,15 @@ public class AutomationGatewayImpl implements AutomationGateway {
         return Uni.createFrom().item(() -> Automation.DeviceDeletionResult.newBuilder().build());
     }
 
-    // TODO When `DeviceRoleState` domain object will be created, move this method to Serializer class
-    // and create related tests
-    private Automation.DeviceRoleState transformToDeviceRoleState(Device device, String devRoleId) {
-
+    private Automation.DeviceRoleState transformToDeviceRoleState(
+            Device device, String devRoleId, DeviceState deviceState) {
         final var deviceRoleId = new DeviceRoleId(devRoleId, device.getDeviceId());
         final var serializeDeviceRoleId = serializer.serialize(deviceRoleId);
+        final var serializedDeviceState = serializer.serialize(deviceState);
 
         return Automation.DeviceRoleState.newBuilder()
                 .setDevRoleId(serializeDeviceRoleId)
-                .setDevRoleState(Automation.ZtpDeviceState.ZTP_DEV_STATE_CREATED)
+                .setDevRoleState(serializedDeviceState)
                 .build();
     }
 }
diff --git a/src/automation/src/main/java/eu/teraflow/automation/AutomationService.java b/src/automation/src/main/java/eu/teraflow/automation/AutomationService.java
index 5c8e95a442d7f6134b6817d144ff2ad646d2b5c3..b9f34d8e4bd3e1703bff1cf48a18a0a2b84e61b1 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/AutomationService.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/AutomationService.java
@@ -17,9 +17,14 @@
 package eu.teraflow.automation;
 
 import eu.teraflow.automation.context.model.Device;
+import eu.teraflow.automation.context.model.DeviceConfig;
 import io.smallrye.mutiny.Uni;
 
 public interface AutomationService {
 
     Uni<Device> addDevice(String deviceId);
+
+    Uni<Device> deleteDevice(String deviceId);
+
+    Uni<Device> updateDevice(String deviceId, DeviceConfig deviceConfig);
 }
diff --git a/src/automation/src/main/java/eu/teraflow/automation/AutomationServiceImpl.java b/src/automation/src/main/java/eu/teraflow/automation/AutomationServiceImpl.java
index 13e56645384938b4eff42aa73ca9e8a5ff73a1bd..773c99de6d94b5f8806a8a354b2371c0a6748f9f 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/AutomationServiceImpl.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/AutomationServiceImpl.java
@@ -18,6 +18,7 @@ package eu.teraflow.automation;
 
 import eu.teraflow.automation.context.ContextService;
 import eu.teraflow.automation.context.model.Device;
+import eu.teraflow.automation.context.model.DeviceConfig;
 import eu.teraflow.automation.device.DeviceService;
 import io.smallrye.mutiny.Uni;
 import javax.enterprise.context.ApplicationScoped;
@@ -27,6 +28,7 @@ import org.jboss.logging.Logger;
 @ApplicationScoped
 public class AutomationServiceImpl implements AutomationService {
     private static final Logger LOGGER = Logger.getLogger(AutomationServiceImpl.class);
+    private static final String MESSAGE = "Retrieved %s";
 
     private final DeviceService deviceService;
     private final ContextService contextService;
@@ -43,14 +45,13 @@ public class AutomationServiceImpl implements AutomationService {
         final var deserializedDeviceUni = contextService.getDevice(deviceId);
 
         deserializedDeviceUni
-                // TODO fix subscribe
                 .subscribe()
                 .with(
                         device -> {
                             final var id = deviceId;
 
                             if (!device.isEnabled()) {
-                                LOGGER.infof("Retrieved %s", device);
+                                LOGGER.infof(MESSAGE, device);
 
                                 final var initialConfiguration =
                                         deviceService.getInitialConfiguration(device.getDeviceId());
@@ -80,4 +81,52 @@ public class AutomationServiceImpl implements AutomationService {
 
         return deserializedDeviceUni;
     }
+
+    @Override
+    public Uni<Device> deleteDevice(String deviceId) {
+        final var deserializedDeviceUni = contextService.getDevice(deviceId);
+
+        deserializedDeviceUni
+                .subscribe()
+                .with(
+                        device -> {
+                            final var id = deviceId;
+
+                            LOGGER.infof(MESSAGE, device);
+
+                            final var empty = deviceService.deleteDevice(device.getDeviceId());
+
+                            empty
+                                    .subscribe()
+                                    .with(emptyMessage -> LOGGER.infof("Device [%s] has been deleted.\n", id));
+                        });
+
+        return deserializedDeviceUni;
+    }
+
+    @Override
+    public Uni<Device> updateDevice(String deviceId, DeviceConfig deviceConfig) {
+        final var deserializedDeviceUni = contextService.getDevice(deviceId);
+
+        deserializedDeviceUni
+                .subscribe()
+                .with(
+                        device -> {
+                            final var id = deviceId;
+
+                            LOGGER.infof(MESSAGE, device);
+                            device.setDeviceConfiguration(deviceConfig);
+                            final var updatedDeviceIdUni = deviceService.configureDevice(device);
+
+                            updatedDeviceIdUni
+                                    .subscribe()
+                                    .with(
+                                            configuredDeviceId ->
+                                                    LOGGER.infof(
+                                                            "Device [%s] has been updated successfully with %s.\n",
+                                                            id, deviceConfig));
+                        });
+
+        return deserializedDeviceUni;
+    }
 }
diff --git a/src/automation/src/main/java/eu/teraflow/automation/ContextSubscriber.java b/src/automation/src/main/java/eu/teraflow/automation/ContextSubscriber.java
index c27a2a844350ce3aeb56c594c82ce4543b7e4d94..ce977d1ff24788c471ab6bf2c8d6b2c113fb5c63 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/ContextSubscriber.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/ContextSubscriber.java
@@ -17,6 +17,8 @@
 package eu.teraflow.automation;
 
 import eu.teraflow.automation.context.ContextService;
+import eu.teraflow.automation.context.model.Event;
+import eu.teraflow.automation.context.model.EventTypeEnum;
 import io.quarkus.runtime.StartupEvent;
 import java.time.Duration;
 import javax.enterprise.context.ApplicationScoped;
@@ -71,15 +73,16 @@ public class ContextSubscriber {
                                     LOGGER.infof("Received %s for device [%s]", event, deviceId);
                                     automationService.addDevice(deviceEvent.getDeviceId());
                                     break;
-
-                                case UPDATE:
                                 case REMOVE:
+                                    LOGGER.infof("Received %s for device [%s]", event, deviceId);
+                                    automationService.deleteDevice(deviceEvent.getDeviceId());
+                                    break;
+                                case UPDATE:
+                                    // TODO a DeviceConfig object should be part of the DeviceEvent object in order
+                                    // for automationService.updateDevice() to be triggered automatically like
+                                    // addDevice().
                                 case UNDEFINED:
-                                    {
-                                        LOGGER.warnf(
-                                                "Received %s for device [%s]. [%s] event handling is not yet implemented, ignoring...",
-                                                event, deviceId, eventType);
-                                    }
+                                    logWarningMessage(event, deviceId, eventType);
                                     break;
                             }
                         });
@@ -94,4 +97,10 @@ public class ContextSubscriber {
             LOGGER.info("Not subscribing to Context service for device events...");
         }
     }
+
+    private void logWarningMessage(Event event, String deviceId, EventTypeEnum eventType) {
+        LOGGER.warnf(
+                "Received %s for device [%s]. [%s] event handling is not yet implemented, ignoring...",
+                event, deviceId, eventType);
+    }
 }
diff --git a/src/automation/src/main/java/eu/teraflow/automation/Serializer.java b/src/automation/src/main/java/eu/teraflow/automation/Serializer.java
index 4dd09b55dc7a67287a84daafaaf4feb0ae190c6e..4359d60db364b4fb28e2623cb0e832a656e803af 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/Serializer.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/Serializer.java
@@ -18,12 +18,14 @@ package eu.teraflow.automation;
 
 import acl.Acl;
 import automation.Automation;
+import automation.Automation.ZtpDeviceState;
 import context.ContextOuterClass;
 import context.ContextOuterClass.ConfigRule_ACL;
 import context.ContextOuterClass.ConfigRule_Custom;
 import context.ContextOuterClass.ContextId;
 import context.ContextOuterClass.DeviceId;
 import context.ContextOuterClass.DeviceOperationalStatusEnum;
+import context.ContextOuterClass.Location.LocationCase;
 import context.ContextOuterClass.Uuid;
 import eu.teraflow.automation.acl.AclAction;
 import eu.teraflow.automation.acl.AclEntry;
@@ -43,6 +45,7 @@ import eu.teraflow.automation.context.model.DeviceConfig;
 import eu.teraflow.automation.context.model.DeviceDriverEnum;
 import eu.teraflow.automation.context.model.DeviceEvent;
 import eu.teraflow.automation.context.model.DeviceOperationalStatus;
+import eu.teraflow.automation.context.model.Empty;
 import eu.teraflow.automation.context.model.EndPoint;
 import eu.teraflow.automation.context.model.EndPointId;
 import eu.teraflow.automation.context.model.Event;
@@ -54,8 +57,10 @@ import eu.teraflow.automation.context.model.LocationTypeRegion;
 import eu.teraflow.automation.context.model.TopologyId;
 import eu.teraflow.automation.kpi_sample_types.model.KpiSampleType;
 import eu.teraflow.automation.model.DeviceRole;
+import eu.teraflow.automation.model.DeviceRoleConfig;
 import eu.teraflow.automation.model.DeviceRoleId;
 import eu.teraflow.automation.model.DeviceRoleType;
+import eu.teraflow.automation.model.DeviceState;
 import java.util.stream.Collectors;
 import javax.inject.Singleton;
 import kpi_sample_types.KpiSampleTypes;
@@ -130,6 +135,36 @@ public class Serializer {
         }
     }
 
+    public Automation.ZtpDeviceState serialize(DeviceState deviceState) {
+        switch (deviceState) {
+            case CREATED:
+                return ZtpDeviceState.ZTP_DEV_STATE_CREATED;
+            case UPDATED:
+                return ZtpDeviceState.ZTP_DEV_STATE_UPDATED;
+            case DELETED:
+                return ZtpDeviceState.ZTP_DEV_STATE_DELETED;
+            case UNDEFINED:
+                return ZtpDeviceState.ZTP_DEV_STATE_UNDEFINED;
+            default:
+                return ZtpDeviceState.UNRECOGNIZED;
+        }
+    }
+
+    public DeviceState deserialize(Automation.ZtpDeviceState serializedDeviceState) {
+        switch (serializedDeviceState) {
+            case ZTP_DEV_STATE_CREATED:
+                return DeviceState.CREATED;
+            case ZTP_DEV_STATE_UPDATED:
+                return DeviceState.UPDATED;
+            case ZTP_DEV_STATE_DELETED:
+                return DeviceState.DELETED;
+            case ZTP_DEV_STATE_UNDEFINED:
+            case UNRECOGNIZED:
+            default:
+                return DeviceState.UNDEFINED;
+        }
+    }
+
     public Automation.DeviceRole serialize(DeviceRole deviceRole) {
         final var builder = Automation.DeviceRole.newBuilder();
         final var serializedDeviceRoleId = serialize(deviceRole.getDeviceRoleId());
@@ -148,6 +183,24 @@ public class Serializer {
         return new DeviceRole(deviceRoleId, deviceRoleType);
     }
 
+    public Automation.DeviceRoleConfig serialize(DeviceRoleConfig deviceRoleConfig) {
+        final var builder = Automation.DeviceRoleConfig.newBuilder();
+        final var serializedDeviceRole = serialize(deviceRoleConfig.getDeviceRole());
+        final var serializedDeviceConfig = serialize(deviceRoleConfig.getDeviceConfig());
+
+        builder.setDevRole(serializedDeviceRole);
+        builder.setDevConfig(serializedDeviceConfig);
+
+        return builder.build();
+    }
+
+    public DeviceRoleConfig deserialize(Automation.DeviceRoleConfig deviceRoleConfig) {
+        final var deviceRole = deserialize(deviceRoleConfig.getDevRole());
+        final var deviceConfig = deserialize(deviceRoleConfig.getDevConfig());
+
+        return new DeviceRoleConfig(deviceRole, deviceConfig);
+    }
+
     public ContextOuterClass.EventTypeEnum serialize(EventTypeEnum eventTypeEnum) {
         switch (eventTypeEnum) {
             case CREATE:
@@ -833,12 +886,14 @@ public class Serializer {
         final var serializedEndPointId = serialize(endPointId);
         final var serializedKpiSampleTypes =
                 kpiSampleTypes.stream().map(this::serialize).collect(Collectors.toList());
-        final var serializedEndPointLocation = serialize(endPointLocation);
+        if (endPointLocation != null) {
+            final var serializedEndPointLocation = serialize(endPointLocation);
+            builder.setEndpointLocation(serializedEndPointLocation);
+        }
 
         builder.setEndpointId(serializedEndPointId);
         builder.setEndpointType(endPointType);
         builder.addAllKpiSampleTypes(serializedKpiSampleTypes);
-        builder.setEndpointLocation(serializedEndPointLocation);
 
         return builder.build();
     }
@@ -852,9 +907,15 @@ public class Serializer {
         final var endPointId = deserialize(serializedEndPointId);
         final var kpiSampleTypes =
                 serializedKpiSampleTypes.stream().map(this::deserialize).collect(Collectors.toList());
-        final var endPointLocation = deserialize(serializedEndPointLocation);
 
-        return new EndPoint(endPointId, endPointType, kpiSampleTypes, endPointLocation);
+        if (serializedEndPointLocation.getLocationCase() != LocationCase.LOCATION_NOT_SET) {
+            final var endPointLocation = deserialize(serializedEndPointLocation);
+            return new EndPoint.EndPointBuilder(endPointId, endPointType, kpiSampleTypes)
+                    .location(endPointLocation)
+                    .build();
+        }
+
+        return new EndPoint.EndPointBuilder(endPointId, endPointType, kpiSampleTypes).build();
     }
 
     public ContextOuterClass.Device serialize(Device device) {
@@ -911,6 +972,17 @@ public class Serializer {
                 deviceEndPoints);
     }
 
+    public ContextOuterClass.Empty serializeEmpty(Empty empty) {
+
+        final var builder = ContextOuterClass.Empty.newBuilder();
+
+        return builder.build();
+    }
+
+    public Empty deserializeEmpty(ContextOuterClass.Empty serializedEmpty) {
+        return new Empty();
+    }
+
     public Uuid serializeUuid(String uuid) {
         return Uuid.newBuilder().setUuid(uuid).build();
     }
diff --git a/src/automation/src/main/java/eu/teraflow/automation/acl/AclRuleSet.java b/src/automation/src/main/java/eu/teraflow/automation/acl/AclRuleSet.java
index 4a919a6842774b1dcdb8f6cfad3215f54bb0e4f6..6dacab0480647609b85c9b45504341e6b47600fa 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/acl/AclRuleSet.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/acl/AclRuleSet.java
@@ -16,8 +16,8 @@
 
 package eu.teraflow.automation.acl;
 
+import eu.teraflow.automation.common.Util;
 import java.util.List;
-import java.util.stream.Collectors;
 
 public class AclRuleSet {
 
@@ -64,10 +64,11 @@ public class AclRuleSet {
     public String toString() {
         return String.format(
                 "%s:{name:\"%s\", type:\"%s\", description:\"%s\", userId:\"%s\", [%s]}",
-                getClass().getSimpleName(), name, type.toString(), description, userId, toString(entries));
-    }
-
-    private static <T> String toString(List<T> list) {
-        return list.stream().map(T::toString).collect(Collectors.joining(", "));
+                getClass().getSimpleName(),
+                name,
+                type.toString(),
+                description,
+                userId,
+                Util.toString(entries));
     }
 }
diff --git a/src/automation/src/main/java/eu/teraflow/automation/common/Util.java b/src/automation/src/main/java/eu/teraflow/automation/common/Util.java
new file mode 100644
index 0000000000000000000000000000000000000000..aeb5a14f48a2ed9524479bacd6d85e51fc410e7f
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/common/Util.java
@@ -0,0 +1,29 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.common;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class Util {
+
+    private Util() {}
+
+    public static <T> String toString(List<T> list) {
+        return list.stream().map(T::toString).collect(Collectors.joining(", "));
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/Device.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/Device.java
index 1b286f57173c48787460828ba6bfc2c43588d4db..77bd3ca5c861713b43faf178c6450e35e6032b3c 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/context/model/Device.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/Device.java
@@ -16,8 +16,8 @@
 
 package eu.teraflow.automation.context.model;
 
+import eu.teraflow.automation.common.Util;
 import java.util.List;
-import java.util.stream.Collectors;
 
 public class Device {
 
@@ -102,11 +102,7 @@ public class Device {
                 deviceType,
                 deviceConfig,
                 deviceOperationalStatus.toString(),
-                toString(deviceDrivers),
-                toString(endPoints));
-    }
-
-    private static <T> String toString(List<T> list) {
-        return list.stream().map(T::toString).collect(Collectors.joining(", "));
+                Util.toString(deviceDrivers),
+                Util.toString(endPoints));
     }
 }
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/Empty.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/Empty.java
new file mode 100644
index 0000000000000000000000000000000000000000..67649243bc356a58e3df64c491c73aee132feecc
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/Empty.java
@@ -0,0 +1,24 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.context.model;
+
+public class Empty {
+
+    public Empty() {
+        // Empty constructor to represent the Empty rpc message of context service
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/EndPoint.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/EndPoint.java
index f9fb8bf0d8406db4ee4fb07783eaf20bfd88e2b0..25b3864c5d367b7767dc8afb52e9edc04bb31817 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/context/model/EndPoint.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/EndPoint.java
@@ -16,9 +16,9 @@
 
 package eu.teraflow.automation.context.model;
 
+import eu.teraflow.automation.common.Util;
 import eu.teraflow.automation.kpi_sample_types.model.KpiSampleType;
 import java.util.List;
-import java.util.stream.Collectors;
 
 public class EndPoint {
     private final EndPointId endPointId;
@@ -26,15 +26,11 @@ public class EndPoint {
     private final List<KpiSampleType> kpiSampleTypes;
     private final Location endPointLocation;
 
-    public EndPoint(
-            EndPointId endPointId,
-            String endPointType,
-            List<KpiSampleType> kpiSampleTypes,
-            Location endPointLocation) {
-        this.endPointId = endPointId;
-        this.endPointType = endPointType;
-        this.kpiSampleTypes = kpiSampleTypes;
-        this.endPointLocation = endPointLocation;
+    EndPoint(EndPointBuilder builder) {
+        this.endPointId = builder.endPointId;
+        this.endPointType = builder.endPointType;
+        this.kpiSampleTypes = builder.kpiSampleTypes;
+        this.endPointLocation = builder.endPointLocation;
     }
 
     public EndPointId getEndPointId() {
@@ -60,11 +56,50 @@ public class EndPoint {
                 getClass().getSimpleName(),
                 endPointId,
                 endPointType,
-                toString(kpiSampleTypes),
+                Util.toString(kpiSampleTypes),
                 endPointLocation);
     }
 
-    private static <T> String toString(List<T> list) {
-        return list.stream().map(T::toString).collect(Collectors.joining(", "));
+    public static class EndPointBuilder {
+        private final EndPointId endPointId;
+        private final String endPointType;
+        private final List<KpiSampleType> kpiSampleTypes;
+        private Location endPointLocation;
+
+        public EndPointBuilder(
+                EndPointId endPointId, String endPointType, List<KpiSampleType> kpiSampleTypes) {
+            this.endPointId = endPointId;
+            this.endPointType = endPointType;
+            this.kpiSampleTypes = kpiSampleTypes;
+        }
+
+        public EndPointBuilder location(Location endPointLocation) {
+            this.endPointLocation = endPointLocation;
+            return this;
+        }
+
+        public EndPoint build() {
+            EndPoint endPoint = new EndPoint(this);
+            validateEndPointObject(endPoint);
+            return endPoint;
+        }
+
+        private void validateEndPointObject(EndPoint endPoint) {
+            final var validatedEndPointId = endPoint.getEndPointId();
+            final var validatedEndPointType = endPoint.getEndPointType();
+            final var validatedKpiSampleTypes = endPoint.getKpiSampleTypes();
+
+            if (validatedEndPointId == null) {
+                throw new IllegalStateException("EndPoint ID cannot be null");
+            }
+
+            if (validatedEndPointType == null) {
+                throw new IllegalStateException("EndPoint type cannot be null");
+            }
+
+            if (validatedKpiSampleTypes == null) {
+                throw new IllegalStateException("Kpi sample types cannot be null");
+            }
+        }
     }
 }
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGateway.java b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGateway.java
index 8cbf0885ba6537e7bca31e5bb6efd0494e4fe879..5244f8ea63abdf88ce50cd6c30074809a1fb0c7b 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGateway.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGateway.java
@@ -18,10 +18,13 @@ package eu.teraflow.automation.device;
 
 import eu.teraflow.automation.context.model.Device;
 import eu.teraflow.automation.context.model.DeviceConfig;
+import eu.teraflow.automation.context.model.Empty;
 import io.smallrye.mutiny.Uni;
 
 public interface DeviceGateway {
     Uni<DeviceConfig> getInitialConfiguration(String deviceId);
 
     Uni<String> configureDevice(Device device);
+
+    Uni<Empty> deleteDevice(String deviceId);
 }
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGatewayImpl.java b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGatewayImpl.java
index 7849e36e6965df293381e5bc8a04db552d3f28d4..f045833eb98e3ce2e784ff11c9ba28bb3e955a84 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGatewayImpl.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGatewayImpl.java
@@ -20,6 +20,7 @@ import device.DeviceService;
 import eu.teraflow.automation.Serializer;
 import eu.teraflow.automation.context.model.Device;
 import eu.teraflow.automation.context.model.DeviceConfig;
+import eu.teraflow.automation.context.model.Empty;
 import io.quarkus.grpc.GrpcClient;
 import io.smallrye.mutiny.Uni;
 import javax.enterprise.context.ApplicationScoped;
@@ -57,4 +58,14 @@ public class DeviceGatewayImpl implements DeviceGateway {
                 .onItem()
                 .transform(serializer::deserialize);
     }
+
+    @Override
+    public Uni<Empty> deleteDevice(String deviceId) {
+        final var serializedDeviceId = serializer.serializeDeviceId(deviceId);
+
+        return deviceDelegate
+                .deleteDevice(serializedDeviceId)
+                .onItem()
+                .transform(serializer::deserializeEmpty);
+    }
 }
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/DeviceService.java b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceService.java
index 229aea7dfe29a11487d3e61709981300a2ff9600..d9f03d612743a765adbbe6b8ecbabaf48c39a9a0 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/device/DeviceService.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceService.java
@@ -18,6 +18,7 @@ package eu.teraflow.automation.device;
 
 import eu.teraflow.automation.context.model.Device;
 import eu.teraflow.automation.context.model.DeviceConfig;
+import eu.teraflow.automation.context.model.Empty;
 import io.smallrye.mutiny.Uni;
 
 public interface DeviceService {
@@ -25,4 +26,6 @@ public interface DeviceService {
     Uni<DeviceConfig> getInitialConfiguration(String deviceId);
 
     Uni<String> configureDevice(Device device);
+
+    Uni<Empty> deleteDevice(String deviceId);
 }
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/DeviceServiceImpl.java b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceServiceImpl.java
index d5dd6fc2be73b55da9f6d31efbc21bf40c431c20..e6a8fc675479ba61a045445fdb03e2c7f7b924e2 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/device/DeviceServiceImpl.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceServiceImpl.java
@@ -18,6 +18,7 @@ package eu.teraflow.automation.device;
 
 import eu.teraflow.automation.context.model.Device;
 import eu.teraflow.automation.context.model.DeviceConfig;
+import eu.teraflow.automation.context.model.Empty;
 import io.smallrye.mutiny.Uni;
 import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
@@ -43,4 +44,9 @@ public class DeviceServiceImpl implements DeviceService {
 
         return deviceGateway.configureDevice(device);
     }
+
+    @Override
+    public Uni<Empty> deleteDevice(String deviceId) {
+        return deviceGateway.deleteDevice(deviceId);
+    }
 }
diff --git a/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRole.java b/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRole.java
index 6dffcd1c0300672a3e23fc0ee8372b77b1bb55b7..da2f1c80e2f1433fe0cff6ba5397a86dd1c2da55 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRole.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRole.java
@@ -34,4 +34,10 @@ public class DeviceRole {
     public DeviceRoleType getType() {
         return type;
     }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{%s, deviceRoleType:\"%s\"}", getClass().getSimpleName(), id, type.toString());
+    }
 }
diff --git a/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRoleConfig.java b/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRoleConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..aae556fff704ec22dac16304e55f31cc185517ad
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRoleConfig.java
@@ -0,0 +1,43 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.model;
+
+import eu.teraflow.automation.context.model.DeviceConfig;
+
+public class DeviceRoleConfig {
+
+    private final DeviceRole deviceRole;
+    private final DeviceConfig deviceConfig;
+
+    public DeviceRoleConfig(DeviceRole deviceRole, DeviceConfig deviceConfig) {
+        this.deviceRole = deviceRole;
+        this.deviceConfig = deviceConfig;
+    }
+
+    public DeviceRole getDeviceRole() {
+        return deviceRole;
+    }
+
+    public DeviceConfig getDeviceConfig() {
+        return deviceConfig;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s, %s}", getClass().getSimpleName(), deviceRole, deviceConfig);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRoleId.java b/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRoleId.java
index b11f42ad054a3446370e123e37c7c13b025711f3..064c4f1e647ce6fded0f67925924d50d582f29e2 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRoleId.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRoleId.java
@@ -33,4 +33,10 @@ public class DeviceRoleId {
     public String getDeviceId() {
         return deviceId;
     }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{id:\"%s\", deviceId:\"%s\"}", getClass().getSimpleName(), id, deviceId);
+    }
 }
diff --git a/src/automation/src/test/java/eu/teraflow/automation/AutomationFunctionalServiceTest.java b/src/automation/src/test/java/eu/teraflow/automation/AutomationFunctionalServiceTest.java
index d697569123484d1f8022a79794cf0367440cbbab..75045288c99ff041e9fdc1d4a1bdf7365f9dd48a 100644
--- a/src/automation/src/test/java/eu/teraflow/automation/AutomationFunctionalServiceTest.java
+++ b/src/automation/src/test/java/eu/teraflow/automation/AutomationFunctionalServiceTest.java
@@ -29,7 +29,7 @@ import eu.teraflow.automation.context.model.Device;
 import eu.teraflow.automation.context.model.DeviceConfig;
 import eu.teraflow.automation.context.model.DeviceDriverEnum;
 import eu.teraflow.automation.context.model.DeviceOperationalStatus;
-import eu.teraflow.automation.context.model.EndPoint;
+import eu.teraflow.automation.context.model.EndPoint.EndPointBuilder;
 import eu.teraflow.automation.context.model.EndPointId;
 import eu.teraflow.automation.context.model.Location;
 import eu.teraflow.automation.context.model.LocationTypeRegion;
@@ -109,7 +109,10 @@ class AutomationFunctionalServiceTest {
                 List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
         final var locationTypeRegionA = new LocationTypeRegion("ATH");
         final var locationA = new Location(locationTypeRegionA);
-        final var endPointA = new EndPoint(endPointIdA, endPointTypeA, kpiSampleTypesA, locationA);
+        final var endPointA =
+                new EndPointBuilder(endPointIdA, endPointTypeA, kpiSampleTypesA)
+                        .location(locationA)
+                        .build();
 
         final var topologyIdB = new TopologyId("contextIdB", "idB");
         final var deviceIdB = "deviceIdB";
@@ -120,7 +123,10 @@ class AutomationFunctionalServiceTest {
                 List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
         final var locationTypeRegionB = new LocationTypeRegion("ATH");
         final var locationB = new Location(locationTypeRegionB);
-        final var endPointB = new EndPoint(endPointIdB, endPointTypeB, kpiSampleTypesB, locationB);
+        final var endPointB =
+                new EndPointBuilder(endPointIdB, endPointTypeB, kpiSampleTypesB)
+                        .location(locationB)
+                        .build();
 
         final var endPoints = List.of(endPointA, endPointB);
 
@@ -217,7 +223,10 @@ class AutomationFunctionalServiceTest {
                 List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
         final var locationTypeRegionA = new LocationTypeRegion("ATH");
         final var locationA = new Location(locationTypeRegionA);
-        final var endPointA = new EndPoint(endPointIdA, endPointTypeA, kpiSampleTypesA, locationA);
+        final var endPointA =
+                new EndPointBuilder(endPointIdA, endPointTypeA, kpiSampleTypesA)
+                        .location(locationA)
+                        .build();
 
         final var topologyIdB = new TopologyId("contextIdB", "idB");
         final var deviceIdB = "deviceIdB";
@@ -228,7 +237,10 @@ class AutomationFunctionalServiceTest {
                 List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
         final var locationTypeRegionB = new LocationTypeRegion("ATH");
         final var locationB = new Location(locationTypeRegionB);
-        final var endPointB = new EndPoint(endPointIdB, endPointTypeB, kpiSampleTypesB, locationB);
+        final var endPointB =
+                new EndPointBuilder(endPointIdB, endPointTypeB, kpiSampleTypesB)
+                        .location(locationB)
+                        .build();
 
         final var endPoints = List.of(endPointA, endPointB);
 
@@ -288,4 +300,80 @@ class AutomationFunctionalServiceTest {
                             assertThat(deviceConfig.getDeviceId()).isEqualTo(deviceId);
                         });
     }
+
+    @Test
+    void shouldDeleteDevice() {
+        final var uuidForDeviceRoleId =
+                ContextOuterClass.Uuid.newBuilder()
+                        .setUuid(UUID.fromString("0f14d0ab-9608-7862-a9e4-5ed26688389b").toString())
+                        .build();
+
+        final var uuidForDeviceId =
+                ContextOuterClass.Uuid.newBuilder()
+                        .setUuid(UUID.fromString("9f14d0ab-9608-7862-a9e4-5ed26688389c").toString())
+                        .build();
+
+        final var outDeviceId =
+                ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(uuidForDeviceId).build();
+
+        final var outDeviceRoleId =
+                Automation.DeviceRoleId.newBuilder()
+                        .setDevRoleId(uuidForDeviceRoleId)
+                        .setDevId(outDeviceId)
+                        .build();
+
+        String deviceId = outDeviceRoleId.getDevRoleId().toString();
+        String deviceType = "cisco";
+
+        final var deviceDrivers = List.of(DeviceDriverEnum.IETF_NETWORK_TOPOLOGY, DeviceDriverEnum.P4);
+
+        final var topologyIdA = new TopologyId("contextIdA", "idA");
+        final var deviceIdA = "deviceIdA";
+        final var idA = "idA";
+        final var endPointIdA = new EndPointId(topologyIdA, deviceIdA, idA);
+
+        final var endPointTypeA = "endPointTypeA";
+        final var kpiSampleTypesA =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+        final var locationTypeRegionA = new LocationTypeRegion("ATH");
+        final var locationA = new Location(locationTypeRegionA);
+        final var endPointA =
+                new EndPointBuilder(endPointIdA, endPointTypeA, kpiSampleTypesA)
+                        .location(locationA)
+                        .build();
+
+        final var topologyIdB = new TopologyId("contextIdB", "idB");
+        final var deviceIdB = "deviceIdB";
+        final var idB = "idB";
+        final var endPointIdB = new EndPointId(topologyIdB, deviceIdB, idB);
+        final var endPointTypeB = "endPointTypeB";
+        final var kpiSampleTypesB =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+        final var locationTypeRegionB = new LocationTypeRegion("ATH");
+        final var locationB = new Location(locationTypeRegionB);
+        final var endPointB =
+                new EndPointBuilder(endPointIdB, endPointTypeB, kpiSampleTypesB)
+                        .location(locationB)
+                        .build();
+
+        final var endPoints = List.of(endPointA, endPointB);
+
+        Device device =
+                new Device(
+                        deviceId, deviceType, DeviceOperationalStatus.DISABLED, deviceDrivers, endPoints);
+        Uni<Device> deviceUni = Uni.createFrom().item(device);
+
+        Mockito.when(contextGateway.getDevice(Mockito.any())).thenReturn(deviceUni);
+
+        final var deletedDevice = automationService.deleteDevice(deviceId);
+
+        Assertions.assertThat(deletedDevice).isNotNull();
+
+        deletedDevice
+                .subscribe()
+                .with(
+                        removedDevice -> {
+                            assertThat(removedDevice).isEqualTo(deletedDevice);
+                        });
+    }
 }
diff --git a/src/automation/src/test/java/eu/teraflow/automation/AutomationServiceTest.java b/src/automation/src/test/java/eu/teraflow/automation/AutomationServiceTest.java
index bd69616bcb8331919faf3ed90b6612f01a7321b9..85ed170efbf938b11303d92a6697c89836e0bf70 100644
--- a/src/automation/src/test/java/eu/teraflow/automation/AutomationServiceTest.java
+++ b/src/automation/src/test/java/eu/teraflow/automation/AutomationServiceTest.java
@@ -30,7 +30,7 @@ import eu.teraflow.automation.context.model.Device;
 import eu.teraflow.automation.context.model.DeviceConfig;
 import eu.teraflow.automation.context.model.DeviceDriverEnum;
 import eu.teraflow.automation.context.model.DeviceOperationalStatus;
-import eu.teraflow.automation.context.model.EndPoint;
+import eu.teraflow.automation.context.model.EndPoint.EndPointBuilder;
 import eu.teraflow.automation.context.model.EndPointId;
 import eu.teraflow.automation.context.model.Location;
 import eu.teraflow.automation.context.model.LocationTypeRegion;
@@ -38,6 +38,7 @@ import eu.teraflow.automation.context.model.TopologyId;
 import eu.teraflow.automation.device.DeviceGateway;
 import eu.teraflow.automation.kpi_sample_types.model.KpiSampleType;
 import eu.teraflow.automation.model.DeviceRole;
+import eu.teraflow.automation.model.DeviceRoleConfig;
 import eu.teraflow.automation.model.DeviceRoleId;
 import eu.teraflow.automation.model.DeviceRoleType;
 import io.quarkus.grpc.GrpcClient;
@@ -88,7 +89,10 @@ class AutomationServiceTest {
                 List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
         final var locationTypeRegionA = new LocationTypeRegion("ATH");
         final var locationA = new Location(locationTypeRegionA);
-        final var endPointA = new EndPoint(endPointIdA, endPointTypeA, kpiSampleTypesA, locationA);
+        final var endPointA =
+                new EndPointBuilder(endPointIdA, endPointTypeA, kpiSampleTypesA)
+                        .location(locationA)
+                        .build();
 
         final var topologyIdB = new TopologyId("contextIdB", "idB");
         final var deviceIdB = "deviceIdB";
@@ -99,7 +103,10 @@ class AutomationServiceTest {
                 List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
         final var locationTypeRegionB = new LocationTypeRegion("ATH");
         final var locationB = new Location(locationTypeRegionB);
-        final var endPointB = new EndPoint(endPointIdB, endPointTypeB, kpiSampleTypesB, locationB);
+        final var endPointB =
+                new EndPointBuilder(endPointIdB, endPointTypeB, kpiSampleTypesB)
+                        .location(locationB)
+                        .build();
 
         final var endPoints = List.of(endPointA, endPointB);
 
@@ -154,16 +161,68 @@ class AutomationServiceTest {
     @Test
     void shouldUpdateDeviceRole() throws ExecutionException, InterruptedException, TimeoutException {
         CompletableFuture<String> message = new CompletableFuture<>();
+
         final var DEVICE_ID = "0f14d0ab-9608-7862-a9e4-5ed26688389b";
         final var DEVICE_ROLE_ID = "0f14d0ab-9608-7862-a9e4-5ed26688389a";
+        final var DEVICE_TYPE = "ztp";
+
+        final var deviceDrivers = List.of(DeviceDriverEnum.IETF_NETWORK_TOPOLOGY, DeviceDriverEnum.P4);
+
+        final var topologyIdA = new TopologyId("contextIdA", "idA");
+        final var deviceIdA = "deviceIdA";
+        final var idA = "idA";
+        final var endPointIdA = new EndPointId(topologyIdA, deviceIdA, idA);
+
+        final var endPointTypeA = "endPointTypeA";
+        final var kpiSampleTypesA =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+        final var locationTypeRegionA = new LocationTypeRegion("ATH");
+        final var locationA = new Location(locationTypeRegionA);
+        final var endPointA =
+                new EndPointBuilder(endPointIdA, endPointTypeA, kpiSampleTypesA)
+                        .location(locationA)
+                        .build();
+
+        final var topologyIdB = new TopologyId("contextIdB", "idB");
+        final var deviceIdB = "deviceIdB";
+        final var idB = "idB";
+        final var endPointIdB = new EndPointId(topologyIdB, deviceIdB, idB);
+        final var endPointTypeB = "endPointTypeB";
+        final var kpiSampleTypesB =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+        final var locationTypeRegionB = new LocationTypeRegion("ATH");
+        final var locationB = new Location(locationTypeRegionB);
+        final var endPointB =
+                new EndPointBuilder(endPointIdB, endPointTypeB, kpiSampleTypesB)
+                        .location(locationB)
+                        .build();
+
+        final var endPoints = List.of(endPointA, endPointB);
+
+        final var emptyDeviceConfig = new DeviceConfig(List.of());
+        final var device =
+                new Device(
+                        DEVICE_ID,
+                        DEVICE_TYPE,
+                        emptyDeviceConfig,
+                        DeviceOperationalStatus.ENABLED,
+                        deviceDrivers,
+                        endPoints);
+        Mockito.when(contextGateway.getDevice(Mockito.any())).thenReturn(Uni.createFrom().item(device));
 
         final var deviceRoleId = new DeviceRoleId(DEVICE_ROLE_ID, DEVICE_ID);
-        final var deviceRoleType = DeviceRoleType.DEV_CONF;
-        final var deviceRole = new DeviceRole(deviceRoleId, deviceRoleType);
-        final var serializedDeviceRole = serializer.serialize(deviceRole);
+        final var deviceRole = new DeviceRole(deviceRoleId, DeviceRoleType.DEV_OPS);
+
+        final var configRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA");
+        final var configRuleTypeA = new ConfigRuleTypeCustom(configRuleCustomA);
+        final var deviceConfig =
+                new DeviceConfig(List.of(new ConfigRule(ConfigActionEnum.SET, configRuleTypeA)));
+
+        final var deviceRoleConfig = new DeviceRoleConfig(deviceRole, deviceConfig);
+        final var serializedDeviceRoleConfig = serializer.serialize(deviceRoleConfig);
 
         client
-                .ztpUpdate(serializedDeviceRole)
+                .ztpUpdate(serializedDeviceRoleConfig)
                 .subscribe()
                 .with(
                         deviceRoleState -> {
diff --git a/src/automation/src/test/java/eu/teraflow/automation/ContextSubscriberTest.java b/src/automation/src/test/java/eu/teraflow/automation/ContextSubscriberTest.java
index e8a97d7922b49878af533c23918cf7b23aa20c06..6f8834a1f68e96d3f0be38f8d918ad1be7d391e9 100644
--- a/src/automation/src/test/java/eu/teraflow/automation/ContextSubscriberTest.java
+++ b/src/automation/src/test/java/eu/teraflow/automation/ContextSubscriberTest.java
@@ -61,6 +61,7 @@ class ContextSubscriberTest {
 
         contextSubscriber.listenForDeviceEvents();
 
+        verify(automationService, times(0)).deleteDevice(deviceId);
         verify(automationService, times(1)).addDevice(deviceId);
     }
 
@@ -95,7 +96,7 @@ class ContextSubscriberTest {
     }
 
     @Test
-    void shouldNotCallAddDeviceUponRemoveEvent() {
+    void shouldCallRemoveDeviceUponRemoveEvent() {
         final var uuidForDeviceRoleId =
                 ContextOuterClass.Uuid.newBuilder().setUuid(UUID_FOR_DEVICE_ROLE_ID).build();
 
@@ -122,6 +123,7 @@ class ContextSubscriberTest {
         contextSubscriber.listenForDeviceEvents();
 
         verify(automationService, times(0)).addDevice(deviceId);
+        verify(automationService, times(1)).deleteDevice(deviceId);
     }
 
     @Test
diff --git a/src/automation/src/test/java/eu/teraflow/automation/EndPointCreationTest.java b/src/automation/src/test/java/eu/teraflow/automation/EndPointCreationTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..d2094efaf48338c710121eddffc4b5fb1edd3790
--- /dev/null
+++ b/src/automation/src/test/java/eu/teraflow/automation/EndPointCreationTest.java
@@ -0,0 +1,124 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
+
+import eu.teraflow.automation.context.model.EndPoint;
+import eu.teraflow.automation.context.model.EndPointId;
+import eu.teraflow.automation.context.model.Location;
+import eu.teraflow.automation.context.model.LocationTypeRegion;
+import eu.teraflow.automation.context.model.TopologyId;
+import eu.teraflow.automation.kpi_sample_types.model.KpiSampleType;
+import io.quarkus.test.junit.QuarkusTest;
+import java.util.List;
+import org.junit.jupiter.api.Test;
+
+@QuarkusTest
+class EndPointCreationTest {
+
+    @Test
+    void shouldCreateEndPointObjectGivenAllAvailableFields() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+
+        final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+        final var expectedEndPointType = "expectedEndPointType";
+        final var expectedKpiSampleTypes =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+
+        final var expectedLocationType = new LocationTypeRegion("ATH");
+        final var expectedEndPointLocation = new Location(expectedLocationType);
+
+        final var expectedEndPoint =
+                new EndPoint.EndPointBuilder(
+                                expectedEndPointId, expectedEndPointType, expectedKpiSampleTypes)
+                        .location(expectedEndPointLocation)
+                        .build();
+
+        assertThat(expectedEndPoint.getEndPointId()).isEqualTo(expectedEndPointId);
+        assertThat(expectedEndPoint.getEndPointType()).isEqualTo(expectedEndPointType);
+        assertThat(expectedEndPoint.getKpiSampleTypes()).isEqualTo(expectedKpiSampleTypes);
+        assertThat(expectedEndPoint.getEndPointLocation()).isEqualTo(expectedEndPointLocation);
+    }
+
+    @Test
+    void shouldCreateEndPointObjectGivenAllFieldsExceptFromLocation() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+
+        final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+        final var expectedEndPointType = "expectedEndPointType";
+        final var expectedKpiSampleTypes =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+
+        final var expectedEndPoint =
+                new EndPoint.EndPointBuilder(
+                                expectedEndPointId, expectedEndPointType, expectedKpiSampleTypes)
+                        .build();
+
+        assertThat(expectedEndPoint.getEndPointId()).isEqualTo(expectedEndPointId);
+        assertThat(expectedEndPoint.getEndPointType()).isEqualTo(expectedEndPointType);
+        assertThat(expectedEndPoint.getKpiSampleTypes()).isEqualTo(expectedKpiSampleTypes);
+    }
+
+    @Test
+    void shouldThrowIllegalStateExceptionDuringCreationOfEndPointObjectUponMissingEndPointId() {
+        final var expectedEndPointType = "expectedEndPointType";
+        final var expectedKpiSampleTypes =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+
+        final var endPoint =
+                new EndPoint.EndPointBuilder(null, expectedEndPointType, expectedKpiSampleTypes);
+
+        assertThatExceptionOfType(IllegalStateException.class).isThrownBy(endPoint::build);
+    }
+
+    @Test
+    void shouldThrowIllegalStateExceptionDuringCreationOfEndPointObjectUponMissingEndPointType() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+
+        final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+        final var expectedKpiSampleTypes =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+
+        final var endPoint =
+                new EndPoint.EndPointBuilder(expectedEndPointId, null, expectedKpiSampleTypes);
+
+        assertThatExceptionOfType(IllegalStateException.class).isThrownBy(endPoint::build);
+    }
+
+    @Test
+    void shouldThrowIllegalStateExceptionDuringCreationOfEndPointObjectUponMissingKpiSampleTypes() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+
+        final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+        final var expectedEndPointType = "expectedEndPointType";
+
+        final var endPoint =
+                new EndPoint.EndPointBuilder(expectedEndPointId, expectedEndPointType, null);
+
+        assertThatExceptionOfType(IllegalStateException.class).isThrownBy(endPoint::build);
+    }
+}
diff --git a/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java b/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java
index 35074b1dd4a62f0accf49db3ec87c32942de6183..74cdc0060230f22ae6c022627a4a8be47a9705b5 100644
--- a/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java
+++ b/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java
@@ -21,6 +21,7 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
 
 import acl.Acl;
 import automation.Automation;
+import automation.Automation.ZtpDeviceState;
 import context.ContextOuterClass;
 import context.ContextOuterClass.DeviceId;
 import context.ContextOuterClass.DeviceOperationalStatusEnum;
@@ -43,7 +44,8 @@ import eu.teraflow.automation.context.model.DeviceConfig;
 import eu.teraflow.automation.context.model.DeviceDriverEnum;
 import eu.teraflow.automation.context.model.DeviceEvent;
 import eu.teraflow.automation.context.model.DeviceOperationalStatus;
-import eu.teraflow.automation.context.model.EndPoint;
+import eu.teraflow.automation.context.model.Empty;
+import eu.teraflow.automation.context.model.EndPoint.EndPointBuilder;
 import eu.teraflow.automation.context.model.EndPointId;
 import eu.teraflow.automation.context.model.Event;
 import eu.teraflow.automation.context.model.EventTypeEnum;
@@ -54,8 +56,10 @@ import eu.teraflow.automation.context.model.LocationTypeRegion;
 import eu.teraflow.automation.context.model.TopologyId;
 import eu.teraflow.automation.kpi_sample_types.model.KpiSampleType;
 import eu.teraflow.automation.model.DeviceRole;
+import eu.teraflow.automation.model.DeviceRoleConfig;
 import eu.teraflow.automation.model.DeviceRoleId;
 import eu.teraflow.automation.model.DeviceRoleType;
+import eu.teraflow.automation.model.DeviceState;
 import io.quarkus.test.junit.QuarkusTest;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -242,6 +246,61 @@ class SerializerTest {
         assertThat(deviceRole).usingRecursiveComparison().isEqualTo(expectedDeviceRole);
     }
 
+    @Test
+    void shouldSerializeDeviceRoleConfig() {
+        final var expectedDevRoleId = new DeviceRoleId("expectedDevRoleId", "expectedDeviceId");
+        final var expectedDevRoleType = DeviceRoleType.DEV_OPS;
+
+        final var deviceRole = new DeviceRole(expectedDevRoleId, expectedDevRoleType);
+        final var serializedDeviceRole = serializer.serialize(deviceRole);
+
+        final var configRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA");
+        final var configRuleTypeA = new ConfigRuleTypeCustom(configRuleCustomA);
+        final var deviceConfig =
+                new DeviceConfig(List.of(new ConfigRule(ConfigActionEnum.SET, configRuleTypeA)));
+        final var serializedDeviceConfig = serializer.serialize(deviceConfig);
+
+        final var expectedDeviceRoleConfig =
+                Automation.DeviceRoleConfig.newBuilder()
+                        .setDevRole(serializedDeviceRole)
+                        .setDevConfig(serializedDeviceConfig)
+                        .build();
+
+        final var deviceRoleConfig = new DeviceRoleConfig(deviceRole, deviceConfig);
+        final var serializedDeviceRoleConfig = serializer.serialize(deviceRoleConfig);
+
+        assertThat(serializedDeviceRoleConfig)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedDeviceRoleConfig);
+    }
+
+    @Test
+    void shouldDeserializeDeviceRoleConfig() {
+        final var expectedDevRoleId = new DeviceRoleId("expectedDevRoleId", "expectedDeviceId");
+        final var expectedDevRoleType = DeviceRoleType.DEV_OPS;
+
+        final var deviceRole = new DeviceRole(expectedDevRoleId, expectedDevRoleType);
+        final var serializedDeviceRole = serializer.serialize(deviceRole);
+
+        final var configRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA");
+        final var configRuleTypeA = new ConfigRuleTypeCustom(configRuleCustomA);
+        final var deviceConfig =
+                new DeviceConfig(List.of(new ConfigRule(ConfigActionEnum.SET, configRuleTypeA)));
+        final var serializedDeviceConfig = serializer.serialize(deviceConfig);
+
+        final var expectedDeviceRoleConfig = new DeviceRoleConfig(deviceRole, deviceConfig);
+
+        final var serializedDeviceRoleConfig =
+                Automation.DeviceRoleConfig.newBuilder()
+                        .setDevRole(serializedDeviceRole)
+                        .setDevConfig(serializedDeviceConfig)
+                        .build();
+
+        final var deviceRoleConfig = serializer.deserialize(serializedDeviceRoleConfig);
+
+        assertThat(deviceRoleConfig).usingRecursiveComparison().isEqualTo(expectedDeviceRoleConfig);
+    }
+
     private static Stream<Arguments> provideEventTypeEnum() {
         return Stream.of(
                 Arguments.of(EventTypeEnum.CREATE, ContextOuterClass.EventTypeEnum.EVENTTYPE_CREATE),
@@ -266,6 +325,31 @@ class SerializerTest {
         assertThat(eventType).isEqualTo(expectedEventType);
     }
 
+    private static Stream<Arguments> provideDeviceState() {
+        return Stream.of(
+                Arguments.of(DeviceState.CREATED, ZtpDeviceState.ZTP_DEV_STATE_CREATED),
+                Arguments.of(DeviceState.UPDATED, ZtpDeviceState.ZTP_DEV_STATE_UPDATED),
+                Arguments.of(DeviceState.DELETED, ZtpDeviceState.ZTP_DEV_STATE_DELETED),
+                Arguments.of(DeviceState.UNDEFINED, ZtpDeviceState.ZTP_DEV_STATE_UNDEFINED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideDeviceState")
+    void shouldSerializeDeviceState(
+            DeviceState deviceState, ZtpDeviceState expectedSerializedDeviceState) {
+        final var serializedDeviceState = serializer.serialize(deviceState);
+        assertThat(serializedDeviceState.getNumber())
+                .isEqualTo(expectedSerializedDeviceState.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideDeviceState")
+    void shouldDeserializeDeviceState(
+            DeviceState expectedDeviceState, ZtpDeviceState serializedDeviceState) {
+        final var deviceState = serializer.deserialize(serializedDeviceState);
+        assertThat(deviceState).isEqualTo(expectedDeviceState);
+    }
+
     @Test
     void shouldSerializeEvent() {
         final var timestamp = ContextOuterClass.Timestamp.newBuilder().setTimestamp(1).build();
@@ -1279,6 +1363,133 @@ class SerializerTest {
                 .isThrownBy(() -> serializer.deserialize(serializedLocation));
     }
 
+    @Test
+    void shouldSerializeEndPointWithAllAvailableFields() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+        final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+
+        final var endPointType = "endPointType";
+        final var kpiSampleTypes =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+        final var locationTypeRegion = new LocationTypeRegion("ATH");
+        final var location = new Location(locationTypeRegion);
+
+        final var endPoint =
+                new EndPointBuilder(endPointId, endPointType, kpiSampleTypes).location(location).build();
+
+        final var serializedEndPointId = serializer.serialize(endPointId);
+        final var serializedKpiSampleTypes =
+                kpiSampleTypes.stream().map(serializer::serialize).collect(Collectors.toList());
+        final var serializedEndPointLocation = serializer.serialize(location);
+
+        final var expectedEndPoint =
+                ContextOuterClass.EndPoint.newBuilder()
+                        .setEndpointId(serializedEndPointId)
+                        .setEndpointType(endPointType)
+                        .addAllKpiSampleTypes(serializedKpiSampleTypes)
+                        .setEndpointLocation(serializedEndPointLocation)
+                        .build();
+
+        final var serializedEndPoint = serializer.serialize(endPoint);
+
+        assertThat(serializedEndPoint).isEqualTo(expectedEndPoint);
+    }
+
+    @Test
+    void shouldDeserializeEndPointWithAllAvailableFields() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+        final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+
+        final var endPointType = "endPointType";
+        final var kpiSampleTypes =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+        final var locationTypeRegion = new LocationTypeRegion("ATH");
+        final var location = new Location(locationTypeRegion);
+
+        final var expectedEndPoint =
+                new EndPointBuilder(endPointId, endPointType, kpiSampleTypes).location(location).build();
+
+        final var serializedEndPointId = serializer.serialize(endPointId);
+        final var serializedKpiSampleTypes =
+                kpiSampleTypes.stream().map(serializer::serialize).collect(Collectors.toList());
+        final var serializedEndPointLocation = serializer.serialize(location);
+
+        final var serializedEndPoint =
+                ContextOuterClass.EndPoint.newBuilder()
+                        .setEndpointId(serializedEndPointId)
+                        .setEndpointType(endPointType)
+                        .addAllKpiSampleTypes(serializedKpiSampleTypes)
+                        .setEndpointLocation(serializedEndPointLocation)
+                        .build();
+
+        final var endPoint = serializer.deserialize(serializedEndPoint);
+
+        assertThat(endPoint).usingRecursiveComparison().isEqualTo(expectedEndPoint);
+    }
+
+    @Test
+    void shouldSerializeEndPointWithAllAvailableFieldsMissingLocation() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+        final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+
+        final var endPointType = "endPointType";
+        final var kpiSampleTypes =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+
+        final var endPoint = new EndPointBuilder(endPointId, endPointType, kpiSampleTypes).build();
+
+        final var serializedEndPointId = serializer.serialize(endPointId);
+        final var serializedKpiSampleTypes =
+                kpiSampleTypes.stream().map(serializer::serialize).collect(Collectors.toList());
+
+        final var expectedEndPoint =
+                ContextOuterClass.EndPoint.newBuilder()
+                        .setEndpointId(serializedEndPointId)
+                        .setEndpointType(endPointType)
+                        .addAllKpiSampleTypes(serializedKpiSampleTypes)
+                        .build();
+
+        final var serializedEndPoint = serializer.serialize(endPoint);
+
+        assertThat(serializedEndPoint).isEqualTo(expectedEndPoint);
+    }
+
+    @Test
+    void shouldDeserializeEndPointWithAllAvailableFieldsMissingLocation() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+        final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+
+        final var endPointType = "endPointType";
+        final var kpiSampleTypes =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+
+        final var expectedEndPoint =
+                new EndPointBuilder(endPointId, endPointType, kpiSampleTypes).build();
+
+        final var serializedEndPointId = serializer.serialize(endPointId);
+        final var serializedKpiSampleTypes =
+                kpiSampleTypes.stream().map(serializer::serialize).collect(Collectors.toList());
+
+        final var serializedEndPoint =
+                ContextOuterClass.EndPoint.newBuilder()
+                        .setEndpointId(serializedEndPointId)
+                        .setEndpointType(endPointType)
+                        .addAllKpiSampleTypes(serializedKpiSampleTypes)
+                        .build();
+
+        final var endPoint = serializer.deserialize(serializedEndPoint);
+
+        assertThat(endPoint).usingRecursiveComparison().isEqualTo(expectedEndPoint);
+    }
+
     @Test
     void shouldSerializeDevice() {
         final var expectedConfigRuleCustomA =
@@ -1310,7 +1521,10 @@ class SerializerTest {
                 List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
         final var locationTypeRegionA = new LocationTypeRegion("ATH");
         final var locationA = new Location(locationTypeRegionA);
-        final var endPointA = new EndPoint(endPointIdA, endPointTypeA, kpiSampleTypesA, locationA);
+        final var endPointA =
+                new EndPointBuilder(endPointIdA, endPointTypeA, kpiSampleTypesA)
+                        .location(locationA)
+                        .build();
 
         final var expectedTopologyIdB = new TopologyId("contextIdB", "idB");
         final var expectedDeviceIdB = "expectedDeviceIdB";
@@ -1322,7 +1536,10 @@ class SerializerTest {
                 List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
         final var locationTypeRegionB = new LocationTypeRegion("ATH");
         final var locationB = new Location(locationTypeRegionB);
-        final var endPointB = new EndPoint(endPointIdB, endPointTypeB, kpiSampleTypesB, locationB);
+        final var endPointB =
+                new EndPointBuilder(endPointIdB, endPointTypeB, kpiSampleTypesB)
+                        .location(locationB)
+                        .build();
 
         final var endPoints = List.of(endPointA, endPointB);
 
@@ -1389,7 +1606,10 @@ class SerializerTest {
                 List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
         final var locationTypeRegionA = new LocationTypeRegion("ATH");
         final var locationA = new Location(locationTypeRegionA);
-        final var endPointA = new EndPoint(endPointIdA, endPointTypeA, kpiSampleTypesA, locationA);
+        final var endPointA =
+                new EndPointBuilder(endPointIdA, endPointTypeA, kpiSampleTypesA)
+                        .location(locationA)
+                        .build();
 
         final var expectedTopologyIdB = new TopologyId("contextIdB", "idB");
         final var expectedDeviceIdB = "expectedDeviceIdB";
@@ -1401,7 +1621,10 @@ class SerializerTest {
                 List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
         final var locationTypeRegionB = new LocationTypeRegion("ATH");
         final var locationB = new Location(locationTypeRegionB);
-        final var endPointB = new EndPoint(endPointIdB, endPointTypeB, kpiSampleTypesB, locationB);
+        final var endPointB =
+                new EndPointBuilder(endPointIdB, endPointTypeB, kpiSampleTypesB)
+                        .location(locationB)
+                        .build();
 
         final var endPoints = List.of(endPointA, endPointB);
 
@@ -1450,6 +1673,27 @@ class SerializerTest {
         assertThat(device).usingRecursiveComparison().isEqualTo(expectedDevice);
     }
 
+    @Test
+    void shouldSerializeEmpty() {
+        final var empty = new Empty();
+        final var expectedEmpty = ContextOuterClass.Empty.newBuilder().build();
+
+        final var serializeEmpty = serializer.serializeEmpty(empty);
+
+        assertThat(serializeEmpty).isEqualTo(expectedEmpty);
+    }
+
+    @Test
+    void shouldDeserializeEmpty() {
+        final var expectedEmpty = new Empty();
+
+        final var serializedEmpty = serializer.serializeEmpty(expectedEmpty);
+
+        final var empty = serializer.deserializeEmpty(serializedEmpty);
+
+        assertThat(empty).usingRecursiveComparison().isEqualTo(expectedEmpty);
+    }
+
     @Test
     void shouldSerializeUuid() {
         final var expectedUuid = "uuid";
diff --git a/src/automation/target/generated-sources/grpc/automation/Automation.java b/src/automation/target/generated-sources/grpc/automation/Automation.java
index f3918e0fc18e6d97b8fd669fb307dcb94964b0e0..cd82f7423092c72c6c2fa02836db645db52f7041 100644
--- a/src/automation/target/generated-sources/grpc/automation/Automation.java
+++ b/src/automation/target/generated-sources/grpc/automation/Automation.java
@@ -1818,6 +1818,830 @@ public final class Automation {
 
   }
 
+  public interface DeviceRoleConfigOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:automation.DeviceRoleConfig)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.automation.DeviceRole devRole = 1;</code>
+     * @return Whether the devRole field is set.
+     */
+    boolean hasDevRole();
+    /**
+     * <code>.automation.DeviceRole devRole = 1;</code>
+     * @return The devRole.
+     */
+    automation.Automation.DeviceRole getDevRole();
+    /**
+     * <code>.automation.DeviceRole devRole = 1;</code>
+     */
+    automation.Automation.DeviceRoleOrBuilder getDevRoleOrBuilder();
+
+    /**
+     * <code>.context.DeviceConfig devConfig = 2;</code>
+     * @return Whether the devConfig field is set.
+     */
+    boolean hasDevConfig();
+    /**
+     * <code>.context.DeviceConfig devConfig = 2;</code>
+     * @return The devConfig.
+     */
+    context.ContextOuterClass.DeviceConfig getDevConfig();
+    /**
+     * <code>.context.DeviceConfig devConfig = 2;</code>
+     */
+    context.ContextOuterClass.DeviceConfigOrBuilder getDevConfigOrBuilder();
+  }
+  /**
+   * Protobuf type {@code automation.DeviceRoleConfig}
+   */
+  public static final class DeviceRoleConfig extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:automation.DeviceRoleConfig)
+      DeviceRoleConfigOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use DeviceRoleConfig.newBuilder() to construct.
+    private DeviceRoleConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private DeviceRoleConfig() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new DeviceRoleConfig();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private DeviceRoleConfig(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              automation.Automation.DeviceRole.Builder subBuilder = null;
+              if (devRole_ != null) {
+                subBuilder = devRole_.toBuilder();
+              }
+              devRole_ = input.readMessage(automation.Automation.DeviceRole.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(devRole_);
+                devRole_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.DeviceConfig.Builder subBuilder = null;
+              if (devConfig_ != null) {
+                subBuilder = devConfig_.toBuilder();
+              }
+              devConfig_ = input.readMessage(context.ContextOuterClass.DeviceConfig.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(devConfig_);
+                devConfig_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return automation.Automation.internal_static_automation_DeviceRoleConfig_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return automation.Automation.internal_static_automation_DeviceRoleConfig_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              automation.Automation.DeviceRoleConfig.class, automation.Automation.DeviceRoleConfig.Builder.class);
+    }
+
+    public static final int DEVROLE_FIELD_NUMBER = 1;
+    private automation.Automation.DeviceRole devRole_;
+    /**
+     * <code>.automation.DeviceRole devRole = 1;</code>
+     * @return Whether the devRole field is set.
+     */
+    @java.lang.Override
+    public boolean hasDevRole() {
+      return devRole_ != null;
+    }
+    /**
+     * <code>.automation.DeviceRole devRole = 1;</code>
+     * @return The devRole.
+     */
+    @java.lang.Override
+    public automation.Automation.DeviceRole getDevRole() {
+      return devRole_ == null ? automation.Automation.DeviceRole.getDefaultInstance() : devRole_;
+    }
+    /**
+     * <code>.automation.DeviceRole devRole = 1;</code>
+     */
+    @java.lang.Override
+    public automation.Automation.DeviceRoleOrBuilder getDevRoleOrBuilder() {
+      return getDevRole();
+    }
+
+    public static final int DEVCONFIG_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.DeviceConfig devConfig_;
+    /**
+     * <code>.context.DeviceConfig devConfig = 2;</code>
+     * @return Whether the devConfig field is set.
+     */
+    @java.lang.Override
+    public boolean hasDevConfig() {
+      return devConfig_ != null;
+    }
+    /**
+     * <code>.context.DeviceConfig devConfig = 2;</code>
+     * @return The devConfig.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceConfig getDevConfig() {
+      return devConfig_ == null ? context.ContextOuterClass.DeviceConfig.getDefaultInstance() : devConfig_;
+    }
+    /**
+     * <code>.context.DeviceConfig devConfig = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceConfigOrBuilder getDevConfigOrBuilder() {
+      return getDevConfig();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (devRole_ != null) {
+        output.writeMessage(1, getDevRole());
+      }
+      if (devConfig_ != null) {
+        output.writeMessage(2, getDevConfig());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (devRole_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getDevRole());
+      }
+      if (devConfig_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getDevConfig());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof automation.Automation.DeviceRoleConfig)) {
+        return super.equals(obj);
+      }
+      automation.Automation.DeviceRoleConfig other = (automation.Automation.DeviceRoleConfig) obj;
+
+      if (hasDevRole() != other.hasDevRole()) return false;
+      if (hasDevRole()) {
+        if (!getDevRole()
+            .equals(other.getDevRole())) return false;
+      }
+      if (hasDevConfig() != other.hasDevConfig()) return false;
+      if (hasDevConfig()) {
+        if (!getDevConfig()
+            .equals(other.getDevConfig())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasDevRole()) {
+        hash = (37 * hash) + DEVROLE_FIELD_NUMBER;
+        hash = (53 * hash) + getDevRole().hashCode();
+      }
+      if (hasDevConfig()) {
+        hash = (37 * hash) + DEVCONFIG_FIELD_NUMBER;
+        hash = (53 * hash) + getDevConfig().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static automation.Automation.DeviceRoleConfig parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static automation.Automation.DeviceRoleConfig parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static automation.Automation.DeviceRoleConfig parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static automation.Automation.DeviceRoleConfig parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static automation.Automation.DeviceRoleConfig parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static automation.Automation.DeviceRoleConfig parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static automation.Automation.DeviceRoleConfig parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static automation.Automation.DeviceRoleConfig parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static automation.Automation.DeviceRoleConfig parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static automation.Automation.DeviceRoleConfig parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static automation.Automation.DeviceRoleConfig parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static automation.Automation.DeviceRoleConfig parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(automation.Automation.DeviceRoleConfig prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code automation.DeviceRoleConfig}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:automation.DeviceRoleConfig)
+        automation.Automation.DeviceRoleConfigOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return automation.Automation.internal_static_automation_DeviceRoleConfig_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return automation.Automation.internal_static_automation_DeviceRoleConfig_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                automation.Automation.DeviceRoleConfig.class, automation.Automation.DeviceRoleConfig.Builder.class);
+      }
+
+      // Construct using automation.Automation.DeviceRoleConfig.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (devRoleBuilder_ == null) {
+          devRole_ = null;
+        } else {
+          devRole_ = null;
+          devRoleBuilder_ = null;
+        }
+        if (devConfigBuilder_ == null) {
+          devConfig_ = null;
+        } else {
+          devConfig_ = null;
+          devConfigBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return automation.Automation.internal_static_automation_DeviceRoleConfig_descriptor;
+      }
+
+      @java.lang.Override
+      public automation.Automation.DeviceRoleConfig getDefaultInstanceForType() {
+        return automation.Automation.DeviceRoleConfig.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public automation.Automation.DeviceRoleConfig build() {
+        automation.Automation.DeviceRoleConfig result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public automation.Automation.DeviceRoleConfig buildPartial() {
+        automation.Automation.DeviceRoleConfig result = new automation.Automation.DeviceRoleConfig(this);
+        if (devRoleBuilder_ == null) {
+          result.devRole_ = devRole_;
+        } else {
+          result.devRole_ = devRoleBuilder_.build();
+        }
+        if (devConfigBuilder_ == null) {
+          result.devConfig_ = devConfig_;
+        } else {
+          result.devConfig_ = devConfigBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof automation.Automation.DeviceRoleConfig) {
+          return mergeFrom((automation.Automation.DeviceRoleConfig)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(automation.Automation.DeviceRoleConfig other) {
+        if (other == automation.Automation.DeviceRoleConfig.getDefaultInstance()) return this;
+        if (other.hasDevRole()) {
+          mergeDevRole(other.getDevRole());
+        }
+        if (other.hasDevConfig()) {
+          mergeDevConfig(other.getDevConfig());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        automation.Automation.DeviceRoleConfig parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (automation.Automation.DeviceRoleConfig) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private automation.Automation.DeviceRole devRole_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          automation.Automation.DeviceRole, automation.Automation.DeviceRole.Builder, automation.Automation.DeviceRoleOrBuilder> devRoleBuilder_;
+      /**
+       * <code>.automation.DeviceRole devRole = 1;</code>
+       * @return Whether the devRole field is set.
+       */
+      public boolean hasDevRole() {
+        return devRoleBuilder_ != null || devRole_ != null;
+      }
+      /**
+       * <code>.automation.DeviceRole devRole = 1;</code>
+       * @return The devRole.
+       */
+      public automation.Automation.DeviceRole getDevRole() {
+        if (devRoleBuilder_ == null) {
+          return devRole_ == null ? automation.Automation.DeviceRole.getDefaultInstance() : devRole_;
+        } else {
+          return devRoleBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.automation.DeviceRole devRole = 1;</code>
+       */
+      public Builder setDevRole(automation.Automation.DeviceRole value) {
+        if (devRoleBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          devRole_ = value;
+          onChanged();
+        } else {
+          devRoleBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.automation.DeviceRole devRole = 1;</code>
+       */
+      public Builder setDevRole(
+          automation.Automation.DeviceRole.Builder builderForValue) {
+        if (devRoleBuilder_ == null) {
+          devRole_ = builderForValue.build();
+          onChanged();
+        } else {
+          devRoleBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.automation.DeviceRole devRole = 1;</code>
+       */
+      public Builder mergeDevRole(automation.Automation.DeviceRole value) {
+        if (devRoleBuilder_ == null) {
+          if (devRole_ != null) {
+            devRole_ =
+              automation.Automation.DeviceRole.newBuilder(devRole_).mergeFrom(value).buildPartial();
+          } else {
+            devRole_ = value;
+          }
+          onChanged();
+        } else {
+          devRoleBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.automation.DeviceRole devRole = 1;</code>
+       */
+      public Builder clearDevRole() {
+        if (devRoleBuilder_ == null) {
+          devRole_ = null;
+          onChanged();
+        } else {
+          devRole_ = null;
+          devRoleBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.automation.DeviceRole devRole = 1;</code>
+       */
+      public automation.Automation.DeviceRole.Builder getDevRoleBuilder() {
+        
+        onChanged();
+        return getDevRoleFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.automation.DeviceRole devRole = 1;</code>
+       */
+      public automation.Automation.DeviceRoleOrBuilder getDevRoleOrBuilder() {
+        if (devRoleBuilder_ != null) {
+          return devRoleBuilder_.getMessageOrBuilder();
+        } else {
+          return devRole_ == null ?
+              automation.Automation.DeviceRole.getDefaultInstance() : devRole_;
+        }
+      }
+      /**
+       * <code>.automation.DeviceRole devRole = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          automation.Automation.DeviceRole, automation.Automation.DeviceRole.Builder, automation.Automation.DeviceRoleOrBuilder> 
+          getDevRoleFieldBuilder() {
+        if (devRoleBuilder_ == null) {
+          devRoleBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              automation.Automation.DeviceRole, automation.Automation.DeviceRole.Builder, automation.Automation.DeviceRoleOrBuilder>(
+                  getDevRole(),
+                  getParentForChildren(),
+                  isClean());
+          devRole_ = null;
+        }
+        return devRoleBuilder_;
+      }
+
+      private context.ContextOuterClass.DeviceConfig devConfig_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder> devConfigBuilder_;
+      /**
+       * <code>.context.DeviceConfig devConfig = 2;</code>
+       * @return Whether the devConfig field is set.
+       */
+      public boolean hasDevConfig() {
+        return devConfigBuilder_ != null || devConfig_ != null;
+      }
+      /**
+       * <code>.context.DeviceConfig devConfig = 2;</code>
+       * @return The devConfig.
+       */
+      public context.ContextOuterClass.DeviceConfig getDevConfig() {
+        if (devConfigBuilder_ == null) {
+          return devConfig_ == null ? context.ContextOuterClass.DeviceConfig.getDefaultInstance() : devConfig_;
+        } else {
+          return devConfigBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.DeviceConfig devConfig = 2;</code>
+       */
+      public Builder setDevConfig(context.ContextOuterClass.DeviceConfig value) {
+        if (devConfigBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          devConfig_ = value;
+          onChanged();
+        } else {
+          devConfigBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceConfig devConfig = 2;</code>
+       */
+      public Builder setDevConfig(
+          context.ContextOuterClass.DeviceConfig.Builder builderForValue) {
+        if (devConfigBuilder_ == null) {
+          devConfig_ = builderForValue.build();
+          onChanged();
+        } else {
+          devConfigBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceConfig devConfig = 2;</code>
+       */
+      public Builder mergeDevConfig(context.ContextOuterClass.DeviceConfig value) {
+        if (devConfigBuilder_ == null) {
+          if (devConfig_ != null) {
+            devConfig_ =
+              context.ContextOuterClass.DeviceConfig.newBuilder(devConfig_).mergeFrom(value).buildPartial();
+          } else {
+            devConfig_ = value;
+          }
+          onChanged();
+        } else {
+          devConfigBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceConfig devConfig = 2;</code>
+       */
+      public Builder clearDevConfig() {
+        if (devConfigBuilder_ == null) {
+          devConfig_ = null;
+          onChanged();
+        } else {
+          devConfig_ = null;
+          devConfigBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceConfig devConfig = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceConfig.Builder getDevConfigBuilder() {
+        
+        onChanged();
+        return getDevConfigFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.DeviceConfig devConfig = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceConfigOrBuilder getDevConfigOrBuilder() {
+        if (devConfigBuilder_ != null) {
+          return devConfigBuilder_.getMessageOrBuilder();
+        } else {
+          return devConfig_ == null ?
+              context.ContextOuterClass.DeviceConfig.getDefaultInstance() : devConfig_;
+        }
+      }
+      /**
+       * <code>.context.DeviceConfig devConfig = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder> 
+          getDevConfigFieldBuilder() {
+        if (devConfigBuilder_ == null) {
+          devConfigBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder>(
+                  getDevConfig(),
+                  getParentForChildren(),
+                  isClean());
+          devConfig_ = null;
+        }
+        return devConfigBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:automation.DeviceRoleConfig)
+    }
+
+    // @@protoc_insertion_point(class_scope:automation.DeviceRoleConfig)
+    private static final automation.Automation.DeviceRoleConfig DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new automation.Automation.DeviceRoleConfig();
+    }
+
+    public static automation.Automation.DeviceRoleConfig getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<DeviceRoleConfig>
+        PARSER = new com.google.protobuf.AbstractParser<DeviceRoleConfig>() {
+      @java.lang.Override
+      public DeviceRoleConfig parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new DeviceRoleConfig(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<DeviceRoleConfig> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<DeviceRoleConfig> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public automation.Automation.DeviceRoleConfig getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
   public interface DeviceRoleListOrBuilder extends
       // @@protoc_insertion_point(interface_extends:automation.DeviceRoleList)
       com.google.protobuf.MessageOrBuilder {
@@ -3987,6 +4811,11 @@ public final class Automation {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_automation_DeviceRole_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_automation_DeviceRoleConfig_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_automation_DeviceRoleConfig_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_automation_DeviceRoleList_descriptor;
   private static final 
@@ -4016,29 +4845,32 @@ public final class Automation {
       "2\r.context.Uuid\022 \n\005devId\030\002 \001(\0132\021.context" +
       ".DeviceId\"j\n\nDeviceRole\022+\n\tdevRoleId\030\001 \001" +
       "(\0132\030.automation.DeviceRoleId\022/\n\013devRoleT" +
-      "ype\030\002 \001(\0162\032.automation.DeviceRoleType\"9\n" +
-      "\016DeviceRoleList\022\'\n\007devRole\030\001 \003(\0132\026.autom" +
-      "ation.DeviceRole\"p\n\017DeviceRoleState\022+\n\td" +
-      "evRoleId\030\001 \001(\0132\030.automation.DeviceRoleId" +
-      "\0220\n\014devRoleState\030\002 \001(\0162\032.automation.ZtpD" +
-      "eviceState\"\'\n\024DeviceDeletionResult\022\017\n\007de" +
-      "leted\030\001 \003(\t*H\n\016DeviceRoleType\022\010\n\004NONE\020\000\022" +
-      "\013\n\007DEV_OPS\020\001\022\014\n\010DEV_CONF\020\002\022\021\n\rPIPELINE_C" +
-      "ONF\020\003*~\n\016ZtpDeviceState\022\033\n\027ZTP_DEV_STATE" +
-      "_UNDEFINED\020\000\022\031\n\025ZTP_DEV_STATE_CREATED\020\001\022" +
-      "\031\n\025ZTP_DEV_STATE_UPDATED\020\002\022\031\n\025ZTP_DEV_ST" +
-      "ATE_DELETED\020\0032\270\003\n\021AutomationService\022F\n\020Z" +
-      "tpGetDeviceRole\022\030.automation.DeviceRoleI" +
-      "d\032\026.automation.DeviceRole\"\000\022N\n\033ZtpGetDev" +
-      "iceRolesByDeviceId\022\021.context.DeviceId\032\032." +
-      "automation.DeviceRoleList\"\000\022?\n\006ZtpAdd\022\026." +
-      "automation.DeviceRole\032\033.automation.Devic" +
-      "eRoleState\"\000\022B\n\tZtpUpdate\022\026.automation.D" +
-      "eviceRole\032\033.automation.DeviceRoleState\"\000" +
-      "\022B\n\tZtpDelete\022\026.automation.DeviceRole\032\033." +
-      "automation.DeviceRoleState\"\000\022B\n\014ZtpDelet" +
-      "eAll\022\016.context.Empty\032 .automation.Device" +
-      "DeletionResult\"\000b\006proto3"
+      "ype\030\002 \001(\0162\032.automation.DeviceRoleType\"e\n" +
+      "\020DeviceRoleConfig\022\'\n\007devRole\030\001 \001(\0132\026.aut" +
+      "omation.DeviceRole\022(\n\tdevConfig\030\002 \001(\0132\025." +
+      "context.DeviceConfig\"9\n\016DeviceRoleList\022\'" +
+      "\n\007devRole\030\001 \003(\0132\026.automation.DeviceRole\"" +
+      "p\n\017DeviceRoleState\022+\n\tdevRoleId\030\001 \001(\0132\030." +
+      "automation.DeviceRoleId\0220\n\014devRoleState\030" +
+      "\002 \001(\0162\032.automation.ZtpDeviceState\"\'\n\024Dev" +
+      "iceDeletionResult\022\017\n\007deleted\030\001 \003(\t*H\n\016De" +
+      "viceRoleType\022\010\n\004NONE\020\000\022\013\n\007DEV_OPS\020\001\022\014\n\010D" +
+      "EV_CONF\020\002\022\021\n\rPIPELINE_CONF\020\003*~\n\016ZtpDevic" +
+      "eState\022\033\n\027ZTP_DEV_STATE_UNDEFINED\020\000\022\031\n\025Z" +
+      "TP_DEV_STATE_CREATED\020\001\022\031\n\025ZTP_DEV_STATE_" +
+      "UPDATED\020\002\022\031\n\025ZTP_DEV_STATE_DELETED\020\0032\276\003\n" +
+      "\021AutomationService\022F\n\020ZtpGetDeviceRole\022\030" +
+      ".automation.DeviceRoleId\032\026.automation.De" +
+      "viceRole\"\000\022N\n\033ZtpGetDeviceRolesByDeviceI" +
+      "d\022\021.context.DeviceId\032\032.automation.Device" +
+      "RoleList\"\000\022?\n\006ZtpAdd\022\026.automation.Device" +
+      "Role\032\033.automation.DeviceRoleState\"\000\022H\n\tZ" +
+      "tpUpdate\022\034.automation.DeviceRoleConfig\032\033" +
+      ".automation.DeviceRoleState\"\000\022B\n\tZtpDele" +
+      "te\022\026.automation.DeviceRole\032\033.automation." +
+      "DeviceRoleState\"\000\022B\n\014ZtpDeleteAll\022\016.cont" +
+      "ext.Empty\032 .automation.DeviceDeletionRes" +
+      "ult\"\000b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -4057,20 +4889,26 @@ public final class Automation {
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_automation_DeviceRole_descriptor,
         new java.lang.String[] { "DevRoleId", "DevRoleType", });
-    internal_static_automation_DeviceRoleList_descriptor =
+    internal_static_automation_DeviceRoleConfig_descriptor =
       getDescriptor().getMessageTypes().get(2);
+    internal_static_automation_DeviceRoleConfig_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_automation_DeviceRoleConfig_descriptor,
+        new java.lang.String[] { "DevRole", "DevConfig", });
+    internal_static_automation_DeviceRoleList_descriptor =
+      getDescriptor().getMessageTypes().get(3);
     internal_static_automation_DeviceRoleList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_automation_DeviceRoleList_descriptor,
         new java.lang.String[] { "DevRole", });
     internal_static_automation_DeviceRoleState_descriptor =
-      getDescriptor().getMessageTypes().get(3);
+      getDescriptor().getMessageTypes().get(4);
     internal_static_automation_DeviceRoleState_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_automation_DeviceRoleState_descriptor,
         new java.lang.String[] { "DevRoleId", "DevRoleState", });
     internal_static_automation_DeviceDeletionResult_descriptor =
-      getDescriptor().getMessageTypes().get(4);
+      getDescriptor().getMessageTypes().get(5);
     internal_static_automation_DeviceDeletionResult_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_automation_DeviceDeletionResult_descriptor,
diff --git a/src/automation/target/generated-sources/grpc/automation/AutomationService.java b/src/automation/target/generated-sources/grpc/automation/AutomationService.java
index 4df9e1098d2028bba58da0959512310ed3d2c4ba..8ef5784815a7b8bb6d51b05f89f6ca3a4b23f2e5 100644
--- a/src/automation/target/generated-sources/grpc/automation/AutomationService.java
+++ b/src/automation/target/generated-sources/grpc/automation/AutomationService.java
@@ -14,7 +14,7 @@ public interface AutomationService extends MutinyService {
     
     io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpAdd(automation.Automation.DeviceRole request);
     
-    io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpUpdate(automation.Automation.DeviceRole request);
+    io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpUpdate(automation.Automation.DeviceRoleConfig request);
     
     io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpDelete(automation.Automation.DeviceRole request);
     
diff --git a/src/automation/target/generated-sources/grpc/automation/AutomationServiceBean.java b/src/automation/target/generated-sources/grpc/automation/AutomationServiceBean.java
index 74d420a1ee8c3c11f824c30fb96f694ddddc64fe..3c7923a0ce8a1501689d1bb567c915590376cf5f 100644
--- a/src/automation/target/generated-sources/grpc/automation/AutomationServiceBean.java
+++ b/src/automation/target/generated-sources/grpc/automation/AutomationServiceBean.java
@@ -40,7 +40,7 @@ public class AutomationServiceBean extends MutinyAutomationServiceGrpc.Automatio
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpUpdate(automation.Automation.DeviceRole request) {
+    public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpUpdate(automation.Automation.DeviceRoleConfig request) {
        try {
          return delegate.ztpUpdate(request);
        } catch (UnsupportedOperationException e) {
diff --git a/src/automation/target/generated-sources/grpc/automation/AutomationServiceClient.java b/src/automation/target/generated-sources/grpc/automation/AutomationServiceClient.java
index 9dcad532a0238f6f14d8e6ca2aa64b445747e9e6..13d13c431b63baebd22ed7fd566b6b25395977e3 100644
--- a/src/automation/target/generated-sources/grpc/automation/AutomationServiceClient.java
+++ b/src/automation/target/generated-sources/grpc/automation/AutomationServiceClient.java
@@ -33,7 +33,7 @@ public class AutomationServiceClient implements AutomationService, MutinyClient<
        return stub.ztpAdd(request);
     }
     @Override
-    public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpUpdate(automation.Automation.DeviceRole request) {
+    public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpUpdate(automation.Automation.DeviceRoleConfig request) {
        return stub.ztpUpdate(request);
     }
     @Override
diff --git a/src/automation/target/generated-sources/grpc/automation/AutomationServiceGrpc.java b/src/automation/target/generated-sources/grpc/automation/AutomationServiceGrpc.java
index 25f5feaf327702102d1ec6cd9ca6cc8ab74cf14f..841994ea713bb9d1c0223689386d6cae35c6d014 100644
--- a/src/automation/target/generated-sources/grpc/automation/AutomationServiceGrpc.java
+++ b/src/automation/target/generated-sources/grpc/automation/AutomationServiceGrpc.java
@@ -107,27 +107,27 @@ public final class AutomationServiceGrpc {
     return getZtpAddMethod;
   }
 
-  private static volatile io.grpc.MethodDescriptor<automation.Automation.DeviceRole,
+  private static volatile io.grpc.MethodDescriptor<automation.Automation.DeviceRoleConfig,
       automation.Automation.DeviceRoleState> getZtpUpdateMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
       fullMethodName = SERVICE_NAME + '/' + "ZtpUpdate",
-      requestType = automation.Automation.DeviceRole.class,
+      requestType = automation.Automation.DeviceRoleConfig.class,
       responseType = automation.Automation.DeviceRoleState.class,
       methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
-  public static io.grpc.MethodDescriptor<automation.Automation.DeviceRole,
+  public static io.grpc.MethodDescriptor<automation.Automation.DeviceRoleConfig,
       automation.Automation.DeviceRoleState> getZtpUpdateMethod() {
-    io.grpc.MethodDescriptor<automation.Automation.DeviceRole, automation.Automation.DeviceRoleState> getZtpUpdateMethod;
+    io.grpc.MethodDescriptor<automation.Automation.DeviceRoleConfig, automation.Automation.DeviceRoleState> getZtpUpdateMethod;
     if ((getZtpUpdateMethod = AutomationServiceGrpc.getZtpUpdateMethod) == null) {
       synchronized (AutomationServiceGrpc.class) {
         if ((getZtpUpdateMethod = AutomationServiceGrpc.getZtpUpdateMethod) == null) {
           AutomationServiceGrpc.getZtpUpdateMethod = getZtpUpdateMethod =
-              io.grpc.MethodDescriptor.<automation.Automation.DeviceRole, automation.Automation.DeviceRoleState>newBuilder()
+              io.grpc.MethodDescriptor.<automation.Automation.DeviceRoleConfig, automation.Automation.DeviceRoleState>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
               .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ZtpUpdate"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  automation.Automation.DeviceRole.getDefaultInstance()))
+                  automation.Automation.DeviceRoleConfig.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   automation.Automation.DeviceRoleState.getDefaultInstance()))
               .setSchemaDescriptor(new AutomationServiceMethodDescriptorSupplier("ZtpUpdate"))
@@ -271,7 +271,7 @@ public final class AutomationServiceGrpc {
 
     /**
      */
-    public void ztpUpdate(automation.Automation.DeviceRole request,
+    public void ztpUpdate(automation.Automation.DeviceRoleConfig request,
         io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleState> responseObserver) {
       io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getZtpUpdateMethod(), responseObserver);
     }
@@ -317,7 +317,7 @@ public final class AutomationServiceGrpc {
             getZtpUpdateMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
               new MethodHandlers<
-                automation.Automation.DeviceRole,
+                automation.Automation.DeviceRoleConfig,
                 automation.Automation.DeviceRoleState>(
                   this, METHODID_ZTP_UPDATE)))
           .addMethod(
@@ -378,7 +378,7 @@ public final class AutomationServiceGrpc {
 
     /**
      */
-    public void ztpUpdate(automation.Automation.DeviceRole request,
+    public void ztpUpdate(automation.Automation.DeviceRoleConfig request,
         io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleState> responseObserver) {
       io.grpc.stub.ClientCalls.asyncUnaryCall(
           getChannel().newCall(getZtpUpdateMethod(), getCallOptions()), request, responseObserver);
@@ -438,7 +438,7 @@ public final class AutomationServiceGrpc {
 
     /**
      */
-    public automation.Automation.DeviceRoleState ztpUpdate(automation.Automation.DeviceRole request) {
+    public automation.Automation.DeviceRoleState ztpUpdate(automation.Automation.DeviceRoleConfig request) {
       return io.grpc.stub.ClientCalls.blockingUnaryCall(
           getChannel(), getZtpUpdateMethod(), getCallOptions(), request);
     }
@@ -499,7 +499,7 @@ public final class AutomationServiceGrpc {
     /**
      */
     public com.google.common.util.concurrent.ListenableFuture<automation.Automation.DeviceRoleState> ztpUpdate(
-        automation.Automation.DeviceRole request) {
+        automation.Automation.DeviceRoleConfig request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
           getChannel().newCall(getZtpUpdateMethod(), getCallOptions()), request);
     }
@@ -558,7 +558,7 @@ public final class AutomationServiceGrpc {
               (io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleState>) responseObserver);
           break;
         case METHODID_ZTP_UPDATE:
-          serviceImpl.ztpUpdate((automation.Automation.DeviceRole) request,
+          serviceImpl.ztpUpdate((automation.Automation.DeviceRoleConfig) request,
               (io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleState>) responseObserver);
           break;
         case METHODID_ZTP_DELETE:
diff --git a/src/automation/target/generated-sources/grpc/automation/MutinyAutomationServiceGrpc.java b/src/automation/target/generated-sources/grpc/automation/MutinyAutomationServiceGrpc.java
index 9b641fcdd7733828c58ce563651ac3d46e697287..64565286ca36fd0b820c000e466954144207ab0b 100644
--- a/src/automation/target/generated-sources/grpc/automation/MutinyAutomationServiceGrpc.java
+++ b/src/automation/target/generated-sources/grpc/automation/MutinyAutomationServiceGrpc.java
@@ -51,7 +51,7 @@ public final class MutinyAutomationServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
-        public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpUpdate(automation.Automation.DeviceRole request) {
+        public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpUpdate(automation.Automation.DeviceRoleConfig request) {
             return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::ztpUpdate);
         }
 
@@ -98,7 +98,7 @@ public final class MutinyAutomationServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
-        public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpUpdate(automation.Automation.DeviceRole request) {
+        public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpUpdate(automation.Automation.DeviceRoleConfig request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
@@ -139,7 +139,7 @@ public final class MutinyAutomationServiceGrpc implements io.quarkus.grpc.runtim
                             automation.AutomationServiceGrpc.getZtpUpdateMethod(),
                             asyncUnaryCall(
                                     new MethodHandlers<
-                                            automation.Automation.DeviceRole,
+                                            automation.Automation.DeviceRoleConfig,
                                             automation.Automation.DeviceRoleState>(
                                             this, METHODID_ZTP_UPDATE, compression)))
                     .addMethod(
@@ -205,7 +205,7 @@ public final class MutinyAutomationServiceGrpc implements io.quarkus.grpc.runtim
                             serviceImpl::ztpAdd);
                     break;
                 case METHODID_ZTP_UPDATE:
-                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((automation.Automation.DeviceRole) request,
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((automation.Automation.DeviceRoleConfig) request,
                             (io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleState>) responseObserver,
                             compression,
                             serviceImpl::ztpUpdate);
diff --git a/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java b/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java
index 09db33413e7785bb484fdd992f81894ac2dcafbf..45a64fabb43bab645e97e9d80bc1825242006dce 100644
--- a/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java
+++ b/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java
@@ -29764,32 +29764,47 @@ public final class ContextOuterClass {
     context.ContextOuterClass.SliceStatusOrBuilder getSliceStatusOrBuilder();
 
     /**
-     * <code>.context.SliceOwner slice_owner = 7;</code>
+     * <code>.context.SliceConfig slice_config = 7;</code>
+     * @return Whether the sliceConfig field is set.
+     */
+    boolean hasSliceConfig();
+    /**
+     * <code>.context.SliceConfig slice_config = 7;</code>
+     * @return The sliceConfig.
+     */
+    context.ContextOuterClass.SliceConfig getSliceConfig();
+    /**
+     * <code>.context.SliceConfig slice_config = 7;</code>
+     */
+    context.ContextOuterClass.SliceConfigOrBuilder getSliceConfigOrBuilder();
+
+    /**
+     * <code>.context.SliceOwner slice_owner = 8;</code>
      * @return Whether the sliceOwner field is set.
      */
     boolean hasSliceOwner();
     /**
-     * <code>.context.SliceOwner slice_owner = 7;</code>
+     * <code>.context.SliceOwner slice_owner = 8;</code>
      * @return The sliceOwner.
      */
     context.ContextOuterClass.SliceOwner getSliceOwner();
     /**
-     * <code>.context.SliceOwner slice_owner = 7;</code>
+     * <code>.context.SliceOwner slice_owner = 8;</code>
      */
     context.ContextOuterClass.SliceOwnerOrBuilder getSliceOwnerOrBuilder();
 
     /**
-     * <code>.context.Timestamp timestamp = 8;</code>
+     * <code>.context.Timestamp timestamp = 9;</code>
      * @return Whether the timestamp field is set.
      */
     boolean hasTimestamp();
     /**
-     * <code>.context.Timestamp timestamp = 8;</code>
+     * <code>.context.Timestamp timestamp = 9;</code>
      * @return The timestamp.
      */
     context.ContextOuterClass.Timestamp getTimestamp();
     /**
-     * <code>.context.Timestamp timestamp = 8;</code>
+     * <code>.context.Timestamp timestamp = 9;</code>
      */
     context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder();
   }
@@ -29906,6 +29921,19 @@ public final class ContextOuterClass {
               break;
             }
             case 58: {
+              context.ContextOuterClass.SliceConfig.Builder subBuilder = null;
+              if (sliceConfig_ != null) {
+                subBuilder = sliceConfig_.toBuilder();
+              }
+              sliceConfig_ = input.readMessage(context.ContextOuterClass.SliceConfig.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(sliceConfig_);
+                sliceConfig_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 66: {
               context.ContextOuterClass.SliceOwner.Builder subBuilder = null;
               if (sliceOwner_ != null) {
                 subBuilder = sliceOwner_.toBuilder();
@@ -29918,7 +29946,7 @@ public final class ContextOuterClass {
 
               break;
             }
-            case 66: {
+            case 74: {
               context.ContextOuterClass.Timestamp.Builder subBuilder = null;
               if (timestamp_ != null) {
                 subBuilder = timestamp_.toBuilder();
@@ -30187,10 +30215,36 @@ public final class ContextOuterClass {
       return getSliceStatus();
     }
 
-    public static final int SLICE_OWNER_FIELD_NUMBER = 7;
+    public static final int SLICE_CONFIG_FIELD_NUMBER = 7;
+    private context.ContextOuterClass.SliceConfig sliceConfig_;
+    /**
+     * <code>.context.SliceConfig slice_config = 7;</code>
+     * @return Whether the sliceConfig field is set.
+     */
+    @java.lang.Override
+    public boolean hasSliceConfig() {
+      return sliceConfig_ != null;
+    }
+    /**
+     * <code>.context.SliceConfig slice_config = 7;</code>
+     * @return The sliceConfig.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceConfig getSliceConfig() {
+      return sliceConfig_ == null ? context.ContextOuterClass.SliceConfig.getDefaultInstance() : sliceConfig_;
+    }
+    /**
+     * <code>.context.SliceConfig slice_config = 7;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceConfigOrBuilder getSliceConfigOrBuilder() {
+      return getSliceConfig();
+    }
+
+    public static final int SLICE_OWNER_FIELD_NUMBER = 8;
     private context.ContextOuterClass.SliceOwner sliceOwner_;
     /**
-     * <code>.context.SliceOwner slice_owner = 7;</code>
+     * <code>.context.SliceOwner slice_owner = 8;</code>
      * @return Whether the sliceOwner field is set.
      */
     @java.lang.Override
@@ -30198,7 +30252,7 @@ public final class ContextOuterClass {
       return sliceOwner_ != null;
     }
     /**
-     * <code>.context.SliceOwner slice_owner = 7;</code>
+     * <code>.context.SliceOwner slice_owner = 8;</code>
      * @return The sliceOwner.
      */
     @java.lang.Override
@@ -30206,17 +30260,17 @@ public final class ContextOuterClass {
       return sliceOwner_ == null ? context.ContextOuterClass.SliceOwner.getDefaultInstance() : sliceOwner_;
     }
     /**
-     * <code>.context.SliceOwner slice_owner = 7;</code>
+     * <code>.context.SliceOwner slice_owner = 8;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.SliceOwnerOrBuilder getSliceOwnerOrBuilder() {
       return getSliceOwner();
     }
 
-    public static final int TIMESTAMP_FIELD_NUMBER = 8;
+    public static final int TIMESTAMP_FIELD_NUMBER = 9;
     private context.ContextOuterClass.Timestamp timestamp_;
     /**
-     * <code>.context.Timestamp timestamp = 8;</code>
+     * <code>.context.Timestamp timestamp = 9;</code>
      * @return Whether the timestamp field is set.
      */
     @java.lang.Override
@@ -30224,7 +30278,7 @@ public final class ContextOuterClass {
       return timestamp_ != null;
     }
     /**
-     * <code>.context.Timestamp timestamp = 8;</code>
+     * <code>.context.Timestamp timestamp = 9;</code>
      * @return The timestamp.
      */
     @java.lang.Override
@@ -30232,7 +30286,7 @@ public final class ContextOuterClass {
       return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
     }
     /**
-     * <code>.context.Timestamp timestamp = 8;</code>
+     * <code>.context.Timestamp timestamp = 9;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
@@ -30271,11 +30325,14 @@ public final class ContextOuterClass {
       if (sliceStatus_ != null) {
         output.writeMessage(6, getSliceStatus());
       }
+      if (sliceConfig_ != null) {
+        output.writeMessage(7, getSliceConfig());
+      }
       if (sliceOwner_ != null) {
-        output.writeMessage(7, getSliceOwner());
+        output.writeMessage(8, getSliceOwner());
       }
       if (timestamp_ != null) {
-        output.writeMessage(8, getTimestamp());
+        output.writeMessage(9, getTimestamp());
       }
       unknownFields.writeTo(output);
     }
@@ -30310,13 +30367,17 @@ public final class ContextOuterClass {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(6, getSliceStatus());
       }
+      if (sliceConfig_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(7, getSliceConfig());
+      }
       if (sliceOwner_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(7, getSliceOwner());
+          .computeMessageSize(8, getSliceOwner());
       }
       if (timestamp_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(8, getTimestamp());
+          .computeMessageSize(9, getTimestamp());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -30351,6 +30412,11 @@ public final class ContextOuterClass {
         if (!getSliceStatus()
             .equals(other.getSliceStatus())) return false;
       }
+      if (hasSliceConfig() != other.hasSliceConfig()) return false;
+      if (hasSliceConfig()) {
+        if (!getSliceConfig()
+            .equals(other.getSliceConfig())) return false;
+      }
       if (hasSliceOwner() != other.hasSliceOwner()) return false;
       if (hasSliceOwner()) {
         if (!getSliceOwner()
@@ -30396,6 +30462,10 @@ public final class ContextOuterClass {
         hash = (37 * hash) + SLICE_STATUS_FIELD_NUMBER;
         hash = (53 * hash) + getSliceStatus().hashCode();
       }
+      if (hasSliceConfig()) {
+        hash = (37 * hash) + SLICE_CONFIG_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceConfig().hashCode();
+      }
       if (hasSliceOwner()) {
         hash = (37 * hash) + SLICE_OWNER_FIELD_NUMBER;
         hash = (53 * hash) + getSliceOwner().hashCode();
@@ -30577,6 +30647,12 @@ public final class ContextOuterClass {
           sliceStatus_ = null;
           sliceStatusBuilder_ = null;
         }
+        if (sliceConfigBuilder_ == null) {
+          sliceConfig_ = null;
+        } else {
+          sliceConfig_ = null;
+          sliceConfigBuilder_ = null;
+        }
         if (sliceOwnerBuilder_ == null) {
           sliceOwner_ = null;
         } else {
@@ -30662,6 +30738,11 @@ public final class ContextOuterClass {
         } else {
           result.sliceStatus_ = sliceStatusBuilder_.build();
         }
+        if (sliceConfigBuilder_ == null) {
+          result.sliceConfig_ = sliceConfig_;
+        } else {
+          result.sliceConfig_ = sliceConfigBuilder_.build();
+        }
         if (sliceOwnerBuilder_ == null) {
           result.sliceOwner_ = sliceOwner_;
         } else {
@@ -30830,6 +30911,9 @@ public final class ContextOuterClass {
         if (other.hasSliceStatus()) {
           mergeSliceStatus(other.getSliceStatus());
         }
+        if (other.hasSliceConfig()) {
+          mergeSliceConfig(other.getSliceConfig());
+        }
         if (other.hasSliceOwner()) {
           mergeSliceOwner(other.getSliceOwner());
         }
@@ -32064,18 +32148,137 @@ public final class ContextOuterClass {
         return sliceStatusBuilder_;
       }
 
+      private context.ContextOuterClass.SliceConfig sliceConfig_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceConfig, context.ContextOuterClass.SliceConfig.Builder, context.ContextOuterClass.SliceConfigOrBuilder> sliceConfigBuilder_;
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       * @return Whether the sliceConfig field is set.
+       */
+      public boolean hasSliceConfig() {
+        return sliceConfigBuilder_ != null || sliceConfig_ != null;
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       * @return The sliceConfig.
+       */
+      public context.ContextOuterClass.SliceConfig getSliceConfig() {
+        if (sliceConfigBuilder_ == null) {
+          return sliceConfig_ == null ? context.ContextOuterClass.SliceConfig.getDefaultInstance() : sliceConfig_;
+        } else {
+          return sliceConfigBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       */
+      public Builder setSliceConfig(context.ContextOuterClass.SliceConfig value) {
+        if (sliceConfigBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          sliceConfig_ = value;
+          onChanged();
+        } else {
+          sliceConfigBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       */
+      public Builder setSliceConfig(
+          context.ContextOuterClass.SliceConfig.Builder builderForValue) {
+        if (sliceConfigBuilder_ == null) {
+          sliceConfig_ = builderForValue.build();
+          onChanged();
+        } else {
+          sliceConfigBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       */
+      public Builder mergeSliceConfig(context.ContextOuterClass.SliceConfig value) {
+        if (sliceConfigBuilder_ == null) {
+          if (sliceConfig_ != null) {
+            sliceConfig_ =
+              context.ContextOuterClass.SliceConfig.newBuilder(sliceConfig_).mergeFrom(value).buildPartial();
+          } else {
+            sliceConfig_ = value;
+          }
+          onChanged();
+        } else {
+          sliceConfigBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       */
+      public Builder clearSliceConfig() {
+        if (sliceConfigBuilder_ == null) {
+          sliceConfig_ = null;
+          onChanged();
+        } else {
+          sliceConfig_ = null;
+          sliceConfigBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       */
+      public context.ContextOuterClass.SliceConfig.Builder getSliceConfigBuilder() {
+        
+        onChanged();
+        return getSliceConfigFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       */
+      public context.ContextOuterClass.SliceConfigOrBuilder getSliceConfigOrBuilder() {
+        if (sliceConfigBuilder_ != null) {
+          return sliceConfigBuilder_.getMessageOrBuilder();
+        } else {
+          return sliceConfig_ == null ?
+              context.ContextOuterClass.SliceConfig.getDefaultInstance() : sliceConfig_;
+        }
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceConfig, context.ContextOuterClass.SliceConfig.Builder, context.ContextOuterClass.SliceConfigOrBuilder> 
+          getSliceConfigFieldBuilder() {
+        if (sliceConfigBuilder_ == null) {
+          sliceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceConfig, context.ContextOuterClass.SliceConfig.Builder, context.ContextOuterClass.SliceConfigOrBuilder>(
+                  getSliceConfig(),
+                  getParentForChildren(),
+                  isClean());
+          sliceConfig_ = null;
+        }
+        return sliceConfigBuilder_;
+      }
+
       private context.ContextOuterClass.SliceOwner sliceOwner_;
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.SliceOwner, context.ContextOuterClass.SliceOwner.Builder, context.ContextOuterClass.SliceOwnerOrBuilder> sliceOwnerBuilder_;
       /**
-       * <code>.context.SliceOwner slice_owner = 7;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        * @return Whether the sliceOwner field is set.
        */
       public boolean hasSliceOwner() {
         return sliceOwnerBuilder_ != null || sliceOwner_ != null;
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 7;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        * @return The sliceOwner.
        */
       public context.ContextOuterClass.SliceOwner getSliceOwner() {
@@ -32086,7 +32289,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 7;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        */
       public Builder setSliceOwner(context.ContextOuterClass.SliceOwner value) {
         if (sliceOwnerBuilder_ == null) {
@@ -32102,7 +32305,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 7;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        */
       public Builder setSliceOwner(
           context.ContextOuterClass.SliceOwner.Builder builderForValue) {
@@ -32116,7 +32319,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 7;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        */
       public Builder mergeSliceOwner(context.ContextOuterClass.SliceOwner value) {
         if (sliceOwnerBuilder_ == null) {
@@ -32134,7 +32337,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 7;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        */
       public Builder clearSliceOwner() {
         if (sliceOwnerBuilder_ == null) {
@@ -32148,7 +32351,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 7;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        */
       public context.ContextOuterClass.SliceOwner.Builder getSliceOwnerBuilder() {
         
@@ -32156,7 +32359,7 @@ public final class ContextOuterClass {
         return getSliceOwnerFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 7;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        */
       public context.ContextOuterClass.SliceOwnerOrBuilder getSliceOwnerOrBuilder() {
         if (sliceOwnerBuilder_ != null) {
@@ -32167,7 +32370,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 7;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.SliceOwner, context.ContextOuterClass.SliceOwner.Builder, context.ContextOuterClass.SliceOwnerOrBuilder> 
@@ -32187,14 +32390,14 @@ public final class ContextOuterClass {
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> timestampBuilder_;
       /**
-       * <code>.context.Timestamp timestamp = 8;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        * @return Whether the timestamp field is set.
        */
       public boolean hasTimestamp() {
         return timestampBuilder_ != null || timestamp_ != null;
       }
       /**
-       * <code>.context.Timestamp timestamp = 8;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        * @return The timestamp.
        */
       public context.ContextOuterClass.Timestamp getTimestamp() {
@@ -32205,7 +32408,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>.context.Timestamp timestamp = 8;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        */
       public Builder setTimestamp(context.ContextOuterClass.Timestamp value) {
         if (timestampBuilder_ == null) {
@@ -32221,7 +32424,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 8;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        */
       public Builder setTimestamp(
           context.ContextOuterClass.Timestamp.Builder builderForValue) {
@@ -32235,7 +32438,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 8;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        */
       public Builder mergeTimestamp(context.ContextOuterClass.Timestamp value) {
         if (timestampBuilder_ == null) {
@@ -32253,7 +32456,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 8;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        */
       public Builder clearTimestamp() {
         if (timestampBuilder_ == null) {
@@ -32267,7 +32470,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 8;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        */
       public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
         
@@ -32275,7 +32478,7 @@ public final class ContextOuterClass {
         return getTimestampFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Timestamp timestamp = 8;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        */
       public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
         if (timestampBuilder_ != null) {
@@ -32286,7 +32489,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>.context.Timestamp timestamp = 8;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
@@ -33650,55 +33853,55 @@ public final class ContextOuterClass {
 
   }
 
-  public interface SliceIdListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.SliceIdList)
+  public interface SliceConfigOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceConfig)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    java.util.List<context.ContextOuterClass.SliceId> 
-        getSliceIdsList();
+    java.util.List<context.ContextOuterClass.ConfigRule> 
+        getConfigRulesList();
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    context.ContextOuterClass.SliceId getSliceIds(int index);
+    context.ContextOuterClass.ConfigRule getConfigRules(int index);
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    int getSliceIdsCount();
+    int getConfigRulesCount();
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
-        getSliceIdsOrBuilderList();
+    java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+        getConfigRulesOrBuilderList();
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
+    context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
         int index);
   }
   /**
-   * Protobuf type {@code context.SliceIdList}
+   * Protobuf type {@code context.SliceConfig}
    */
-  public static final class SliceIdList extends
+  public static final class SliceConfig extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.SliceIdList)
-      SliceIdListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceConfig)
+      SliceConfigOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SliceIdList.newBuilder() to construct.
-    private SliceIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceConfig.newBuilder() to construct.
+    private SliceConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SliceIdList() {
-      sliceIds_ = java.util.Collections.emptyList();
+    private SliceConfig() {
+      configRules_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SliceIdList();
+      return new SliceConfig();
     }
 
     @java.lang.Override
@@ -33706,7 +33909,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SliceIdList(
+    private SliceConfig(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -33727,11 +33930,11 @@ public final class ContextOuterClass {
               break;
             case 10: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>();
+                configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              sliceIds_.add(
-                  input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry));
+              configRules_.add(
+                  input.readMessage(context.ContextOuterClass.ConfigRule.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -33750,7 +33953,7 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
+          configRules_ = java.util.Collections.unmodifiableList(configRules_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -33758,55 +33961,55 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
+      return context.ContextOuterClass.internal_static_context_SliceConfig_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_SliceIdList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceConfig_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.SliceIdList.class, context.ContextOuterClass.SliceIdList.Builder.class);
+              context.ContextOuterClass.SliceConfig.class, context.ContextOuterClass.SliceConfig.Builder.class);
     }
 
-    public static final int SLICE_IDS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.SliceId> sliceIds_;
+    public static final int CONFIG_RULES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ConfigRule> configRules_;
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.SliceId> getSliceIdsList() {
-      return sliceIds_;
+    public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
+      return configRules_;
     }
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
-        getSliceIdsOrBuilderList() {
-      return sliceIds_;
+    public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+        getConfigRulesOrBuilderList() {
+      return configRules_;
     }
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public int getSliceIdsCount() {
-      return sliceIds_.size();
+    public int getConfigRulesCount() {
+      return configRules_.size();
     }
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceId getSliceIds(int index) {
-      return sliceIds_.get(index);
+    public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
+      return configRules_.get(index);
     }
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
+    public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
         int index) {
-      return sliceIds_.get(index);
+      return configRules_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -33823,8 +34026,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < sliceIds_.size(); i++) {
-        output.writeMessage(1, sliceIds_.get(i));
+      for (int i = 0; i < configRules_.size(); i++) {
+        output.writeMessage(1, configRules_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -33835,9 +34038,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < sliceIds_.size(); i++) {
+      for (int i = 0; i < configRules_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, sliceIds_.get(i));
+          .computeMessageSize(1, configRules_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -33849,13 +34052,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.SliceIdList)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceConfig)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.SliceIdList other = (context.ContextOuterClass.SliceIdList) obj;
+      context.ContextOuterClass.SliceConfig other = (context.ContextOuterClass.SliceConfig) obj;
 
-      if (!getSliceIdsList()
-          .equals(other.getSliceIdsList())) return false;
+      if (!getConfigRulesList()
+          .equals(other.getConfigRulesList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -33867,78 +34070,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getSliceIdsCount() > 0) {
-        hash = (37 * hash) + SLICE_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceIdsList().hashCode();
+      if (getConfigRulesCount() > 0) {
+        hash = (37 * hash) + CONFIG_RULES_FIELD_NUMBER;
+        hash = (53 * hash) + getConfigRulesList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceConfig parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceConfig parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceIdList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceConfig parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceIdList parseDelimitedFrom(
+    public static context.ContextOuterClass.SliceConfig parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -33951,7 +34154,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.SliceIdList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceConfig prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -33967,26 +34170,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.SliceIdList}
+     * Protobuf type {@code context.SliceConfig}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.SliceIdList)
-        context.ContextOuterClass.SliceIdListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.SliceConfig)
+        context.ContextOuterClass.SliceConfigOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceConfig_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_SliceIdList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceConfig_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.SliceIdList.class, context.ContextOuterClass.SliceIdList.Builder.class);
+                context.ContextOuterClass.SliceConfig.class, context.ContextOuterClass.SliceConfig.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.SliceIdList.newBuilder()
+      // Construct using context.ContextOuterClass.SliceConfig.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -33999,17 +34202,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getSliceIdsFieldBuilder();
+          getConfigRulesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (sliceIdsBuilder_ == null) {
-          sliceIds_ = java.util.Collections.emptyList();
+        if (configRulesBuilder_ == null) {
+          configRules_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          sliceIdsBuilder_.clear();
+          configRulesBuilder_.clear();
         }
         return this;
       }
@@ -34017,17 +34220,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceConfig_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceIdList getDefaultInstanceForType() {
-        return context.ContextOuterClass.SliceIdList.getDefaultInstance();
+      public context.ContextOuterClass.SliceConfig getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceConfig.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceIdList build() {
-        context.ContextOuterClass.SliceIdList result = buildPartial();
+      public context.ContextOuterClass.SliceConfig build() {
+        context.ContextOuterClass.SliceConfig result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -34035,17 +34238,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceIdList buildPartial() {
-        context.ContextOuterClass.SliceIdList result = new context.ContextOuterClass.SliceIdList(this);
+      public context.ContextOuterClass.SliceConfig buildPartial() {
+        context.ContextOuterClass.SliceConfig result = new context.ContextOuterClass.SliceConfig(this);
         int from_bitField0_ = bitField0_;
-        if (sliceIdsBuilder_ == null) {
+        if (configRulesBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
+            configRules_ = java.util.Collections.unmodifiableList(configRules_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.sliceIds_ = sliceIds_;
+          result.configRules_ = configRules_;
         } else {
-          result.sliceIds_ = sliceIdsBuilder_.build();
+          result.configRules_ = configRulesBuilder_.build();
         }
         onBuilt();
         return result;
@@ -34085,39 +34288,39 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.SliceIdList) {
-          return mergeFrom((context.ContextOuterClass.SliceIdList)other);
+        if (other instanceof context.ContextOuterClass.SliceConfig) {
+          return mergeFrom((context.ContextOuterClass.SliceConfig)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.SliceIdList other) {
-        if (other == context.ContextOuterClass.SliceIdList.getDefaultInstance()) return this;
-        if (sliceIdsBuilder_ == null) {
-          if (!other.sliceIds_.isEmpty()) {
-            if (sliceIds_.isEmpty()) {
-              sliceIds_ = other.sliceIds_;
+      public Builder mergeFrom(context.ContextOuterClass.SliceConfig other) {
+        if (other == context.ContextOuterClass.SliceConfig.getDefaultInstance()) return this;
+        if (configRulesBuilder_ == null) {
+          if (!other.configRules_.isEmpty()) {
+            if (configRules_.isEmpty()) {
+              configRules_ = other.configRules_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureSliceIdsIsMutable();
-              sliceIds_.addAll(other.sliceIds_);
+              ensureConfigRulesIsMutable();
+              configRules_.addAll(other.configRules_);
             }
             onChanged();
           }
         } else {
-          if (!other.sliceIds_.isEmpty()) {
-            if (sliceIdsBuilder_.isEmpty()) {
-              sliceIdsBuilder_.dispose();
-              sliceIdsBuilder_ = null;
-              sliceIds_ = other.sliceIds_;
+          if (!other.configRules_.isEmpty()) {
+            if (configRulesBuilder_.isEmpty()) {
+              configRulesBuilder_.dispose();
+              configRulesBuilder_ = null;
+              configRules_ = other.configRules_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              sliceIdsBuilder_ = 
+              configRulesBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSliceIdsFieldBuilder() : null;
+                   getConfigRulesFieldBuilder() : null;
             } else {
-              sliceIdsBuilder_.addAllMessages(other.sliceIds_);
+              configRulesBuilder_.addAllMessages(other.configRules_);
             }
           }
         }
@@ -34136,11 +34339,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.SliceIdList parsedMessage = null;
+        context.ContextOuterClass.SliceConfig parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.SliceIdList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.SliceConfig) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -34151,244 +34354,244 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.SliceId> sliceIds_ =
+      private java.util.List<context.ContextOuterClass.ConfigRule> configRules_ =
         java.util.Collections.emptyList();
-      private void ensureSliceIdsIsMutable() {
+      private void ensureConfigRulesIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>(sliceIds_);
+          configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>(configRules_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdsBuilder_;
+          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> configRulesBuilder_;
 
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.SliceId> getSliceIdsList() {
-        if (sliceIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(sliceIds_);
+      public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
+        if (configRulesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(configRules_);
         } else {
-          return sliceIdsBuilder_.getMessageList();
+          return configRulesBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public int getSliceIdsCount() {
-        if (sliceIdsBuilder_ == null) {
-          return sliceIds_.size();
+      public int getConfigRulesCount() {
+        if (configRulesBuilder_ == null) {
+          return configRules_.size();
         } else {
-          return sliceIdsBuilder_.getCount();
+          return configRulesBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.SliceId getSliceIds(int index) {
-        if (sliceIdsBuilder_ == null) {
-          return sliceIds_.get(index);
+      public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
+        if (configRulesBuilder_ == null) {
+          return configRules_.get(index);
         } else {
-          return sliceIdsBuilder_.getMessage(index);
+          return configRulesBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder setSliceIds(
-          int index, context.ContextOuterClass.SliceId value) {
-        if (sliceIdsBuilder_ == null) {
+      public Builder setConfigRules(
+          int index, context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSliceIdsIsMutable();
-          sliceIds_.set(index, value);
+          ensureConfigRulesIsMutable();
+          configRules_.set(index, value);
           onChanged();
         } else {
-          sliceIdsBuilder_.setMessage(index, value);
+          configRulesBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder setSliceIds(
-          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
-          sliceIds_.set(index, builderForValue.build());
+      public Builder setConfigRules(
+          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.set(index, builderForValue.build());
           onChanged();
         } else {
-          sliceIdsBuilder_.setMessage(index, builderForValue.build());
+          configRulesBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addSliceIds(context.ContextOuterClass.SliceId value) {
-        if (sliceIdsBuilder_ == null) {
+      public Builder addConfigRules(context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSliceIdsIsMutable();
-          sliceIds_.add(value);
+          ensureConfigRulesIsMutable();
+          configRules_.add(value);
           onChanged();
         } else {
-          sliceIdsBuilder_.addMessage(value);
+          configRulesBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addSliceIds(
-          int index, context.ContextOuterClass.SliceId value) {
-        if (sliceIdsBuilder_ == null) {
+      public Builder addConfigRules(
+          int index, context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSliceIdsIsMutable();
-          sliceIds_.add(index, value);
+          ensureConfigRulesIsMutable();
+          configRules_.add(index, value);
           onChanged();
         } else {
-          sliceIdsBuilder_.addMessage(index, value);
+          configRulesBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addSliceIds(
-          context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
-          sliceIds_.add(builderForValue.build());
+      public Builder addConfigRules(
+          context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.add(builderForValue.build());
           onChanged();
         } else {
-          sliceIdsBuilder_.addMessage(builderForValue.build());
+          configRulesBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addSliceIds(
-          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
-          sliceIds_.add(index, builderForValue.build());
+      public Builder addConfigRules(
+          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.add(index, builderForValue.build());
           onChanged();
         } else {
-          sliceIdsBuilder_.addMessage(index, builderForValue.build());
+          configRulesBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addAllSliceIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.SliceId> values) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
+      public Builder addAllConfigRules(
+          java.lang.Iterable<? extends context.ContextOuterClass.ConfigRule> values) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, sliceIds_);
+              values, configRules_);
           onChanged();
         } else {
-          sliceIdsBuilder_.addAllMessages(values);
+          configRulesBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder clearSliceIds() {
-        if (sliceIdsBuilder_ == null) {
-          sliceIds_ = java.util.Collections.emptyList();
+      public Builder clearConfigRules() {
+        if (configRulesBuilder_ == null) {
+          configRules_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          sliceIdsBuilder_.clear();
+          configRulesBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder removeSliceIds(int index) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
-          sliceIds_.remove(index);
+      public Builder removeConfigRules(int index) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.remove(index);
           onChanged();
         } else {
-          sliceIdsBuilder_.remove(index);
+          configRulesBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.SliceId.Builder getSliceIdsBuilder(
+      public context.ContextOuterClass.ConfigRule.Builder getConfigRulesBuilder(
           int index) {
-        return getSliceIdsFieldBuilder().getBuilder(index);
+        return getConfigRulesFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
+      public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
           int index) {
-        if (sliceIdsBuilder_ == null) {
-          return sliceIds_.get(index);  } else {
-          return sliceIdsBuilder_.getMessageOrBuilder(index);
+        if (configRulesBuilder_ == null) {
+          return configRules_.get(index);  } else {
+          return configRulesBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
-           getSliceIdsOrBuilderList() {
-        if (sliceIdsBuilder_ != null) {
-          return sliceIdsBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+           getConfigRulesOrBuilderList() {
+        if (configRulesBuilder_ != null) {
+          return configRulesBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(sliceIds_);
+          return java.util.Collections.unmodifiableList(configRules_);
         }
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.SliceId.Builder addSliceIdsBuilder() {
-        return getSliceIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.SliceId.getDefaultInstance());
+      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder() {
+        return getConfigRulesFieldBuilder().addBuilder(
+            context.ContextOuterClass.ConfigRule.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.SliceId.Builder addSliceIdsBuilder(
+      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder(
           int index) {
-        return getSliceIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.SliceId.getDefaultInstance());
+        return getConfigRulesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ConfigRule.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.SliceId.Builder> 
-           getSliceIdsBuilderList() {
-        return getSliceIdsFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.ConfigRule.Builder> 
+           getConfigRulesBuilderList() {
+        return getConfigRulesFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
-          getSliceIdsFieldBuilder() {
-        if (sliceIdsBuilder_ == null) {
-          sliceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
-                  sliceIds_,
+          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> 
+          getConfigRulesFieldBuilder() {
+        if (configRulesBuilder_ == null) {
+          configRulesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder>(
+                  configRules_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          sliceIds_ = null;
+          configRules_ = null;
         }
-        return sliceIdsBuilder_;
+        return configRulesBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -34403,95 +34606,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.SliceIdList)
+      // @@protoc_insertion_point(builder_scope:context.SliceConfig)
     }
 
-    // @@protoc_insertion_point(class_scope:context.SliceIdList)
-    private static final context.ContextOuterClass.SliceIdList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceConfig)
+    private static final context.ContextOuterClass.SliceConfig DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceIdList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceConfig();
     }
 
-    public static context.ContextOuterClass.SliceIdList getDefaultInstance() {
+    public static context.ContextOuterClass.SliceConfig getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SliceIdList>
-        PARSER = new com.google.protobuf.AbstractParser<SliceIdList>() {
+    private static final com.google.protobuf.Parser<SliceConfig>
+        PARSER = new com.google.protobuf.AbstractParser<SliceConfig>() {
       @java.lang.Override
-      public SliceIdList parsePartialFrom(
+      public SliceConfig parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SliceIdList(input, extensionRegistry);
+        return new SliceConfig(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SliceIdList> parser() {
+    public static com.google.protobuf.Parser<SliceConfig> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SliceIdList> getParserForType() {
+    public com.google.protobuf.Parser<SliceConfig> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.SliceIdList getDefaultInstanceForType() {
+    public context.ContextOuterClass.SliceConfig getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SliceListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.SliceList)
+  public interface SliceIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceIdList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
-    java.util.List<context.ContextOuterClass.Slice> 
-        getSlicesList();
+    java.util.List<context.ContextOuterClass.SliceId> 
+        getSliceIdsList();
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
-    context.ContextOuterClass.Slice getSlices(int index);
+    context.ContextOuterClass.SliceId getSliceIds(int index);
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
-    int getSlicesCount();
+    int getSliceIdsCount();
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
-    java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
-        getSlicesOrBuilderList();
+    java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+        getSliceIdsOrBuilderList();
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
-    context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
+    context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
         int index);
   }
   /**
-   * Protobuf type {@code context.SliceList}
+   * Protobuf type {@code context.SliceIdList}
    */
-  public static final class SliceList extends
+  public static final class SliceIdList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.SliceList)
-      SliceListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceIdList)
+      SliceIdListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SliceList.newBuilder() to construct.
-    private SliceList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceIdList.newBuilder() to construct.
+    private SliceIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SliceList() {
-      slices_ = java.util.Collections.emptyList();
+    private SliceIdList() {
+      sliceIds_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SliceList();
+      return new SliceIdList();
     }
 
     @java.lang.Override
@@ -34499,7 +34702,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SliceList(
+    private SliceIdList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -34520,11 +34723,11 @@ public final class ContextOuterClass {
               break;
             case 10: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                slices_ = new java.util.ArrayList<context.ContextOuterClass.Slice>();
+                sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              slices_.add(
-                  input.readMessage(context.ContextOuterClass.Slice.parser(), extensionRegistry));
+              sliceIds_.add(
+                  input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -34543,7 +34746,7 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          slices_ = java.util.Collections.unmodifiableList(slices_);
+          sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -34551,55 +34754,55 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
+      return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_SliceList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceIdList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.SliceList.class, context.ContextOuterClass.SliceList.Builder.class);
+              context.ContextOuterClass.SliceIdList.class, context.ContextOuterClass.SliceIdList.Builder.class);
     }
 
-    public static final int SLICES_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.Slice> slices_;
+    public static final int SLICE_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.SliceId> sliceIds_;
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Slice> getSlicesList() {
-      return slices_;
+    public java.util.List<context.ContextOuterClass.SliceId> getSliceIdsList() {
+      return sliceIds_;
     }
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
-        getSlicesOrBuilderList() {
-      return slices_;
+    public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+        getSliceIdsOrBuilderList() {
+      return sliceIds_;
     }
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
     @java.lang.Override
-    public int getSlicesCount() {
-      return slices_.size();
+    public int getSliceIdsCount() {
+      return sliceIds_.size();
     }
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Slice getSlices(int index) {
-      return slices_.get(index);
+    public context.ContextOuterClass.SliceId getSliceIds(int index) {
+      return sliceIds_.get(index);
     }
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
+    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
         int index) {
-      return slices_.get(index);
+      return sliceIds_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -34616,8 +34819,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < slices_.size(); i++) {
-        output.writeMessage(1, slices_.get(i));
+      for (int i = 0; i < sliceIds_.size(); i++) {
+        output.writeMessage(1, sliceIds_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -34628,9 +34831,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < slices_.size(); i++) {
+      for (int i = 0; i < sliceIds_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, slices_.get(i));
+          .computeMessageSize(1, sliceIds_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -34642,13 +34845,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.SliceList)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceIdList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.SliceList other = (context.ContextOuterClass.SliceList) obj;
+      context.ContextOuterClass.SliceIdList other = (context.ContextOuterClass.SliceIdList) obj;
 
-      if (!getSlicesList()
-          .equals(other.getSlicesList())) return false;
+      if (!getSliceIdsList()
+          .equals(other.getSliceIdsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -34660,78 +34863,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getSlicesCount() > 0) {
-        hash = (37 * hash) + SLICES_FIELD_NUMBER;
-        hash = (53 * hash) + getSlicesList().hashCode();
+      if (getSliceIdsCount() > 0) {
+        hash = (37 * hash) + SLICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceIdsList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceIdList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceIdList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceIdList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceList parseDelimitedFrom(
+    public static context.ContextOuterClass.SliceIdList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -34744,7 +34947,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.SliceList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceIdList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -34760,26 +34963,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.SliceList}
+     * Protobuf type {@code context.SliceIdList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.SliceList)
-        context.ContextOuterClass.SliceListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.SliceIdList)
+        context.ContextOuterClass.SliceIdListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_SliceList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceIdList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.SliceList.class, context.ContextOuterClass.SliceList.Builder.class);
+                context.ContextOuterClass.SliceIdList.class, context.ContextOuterClass.SliceIdList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.SliceList.newBuilder()
+      // Construct using context.ContextOuterClass.SliceIdList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -34792,17 +34995,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getSlicesFieldBuilder();
+          getSliceIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (slicesBuilder_ == null) {
-          slices_ = java.util.Collections.emptyList();
+        if (sliceIdsBuilder_ == null) {
+          sliceIds_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          slicesBuilder_.clear();
+          sliceIdsBuilder_.clear();
         }
         return this;
       }
@@ -34810,17 +35013,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceList getDefaultInstanceForType() {
-        return context.ContextOuterClass.SliceList.getDefaultInstance();
+      public context.ContextOuterClass.SliceIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceIdList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceList build() {
-        context.ContextOuterClass.SliceList result = buildPartial();
+      public context.ContextOuterClass.SliceIdList build() {
+        context.ContextOuterClass.SliceIdList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -34828,17 +35031,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceList buildPartial() {
-        context.ContextOuterClass.SliceList result = new context.ContextOuterClass.SliceList(this);
+      public context.ContextOuterClass.SliceIdList buildPartial() {
+        context.ContextOuterClass.SliceIdList result = new context.ContextOuterClass.SliceIdList(this);
         int from_bitField0_ = bitField0_;
-        if (slicesBuilder_ == null) {
+        if (sliceIdsBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            slices_ = java.util.Collections.unmodifiableList(slices_);
+            sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.slices_ = slices_;
+          result.sliceIds_ = sliceIds_;
         } else {
-          result.slices_ = slicesBuilder_.build();
+          result.sliceIds_ = sliceIdsBuilder_.build();
         }
         onBuilt();
         return result;
@@ -34878,39 +35081,39 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.SliceList) {
-          return mergeFrom((context.ContextOuterClass.SliceList)other);
+        if (other instanceof context.ContextOuterClass.SliceIdList) {
+          return mergeFrom((context.ContextOuterClass.SliceIdList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.SliceList other) {
-        if (other == context.ContextOuterClass.SliceList.getDefaultInstance()) return this;
-        if (slicesBuilder_ == null) {
-          if (!other.slices_.isEmpty()) {
-            if (slices_.isEmpty()) {
-              slices_ = other.slices_;
+      public Builder mergeFrom(context.ContextOuterClass.SliceIdList other) {
+        if (other == context.ContextOuterClass.SliceIdList.getDefaultInstance()) return this;
+        if (sliceIdsBuilder_ == null) {
+          if (!other.sliceIds_.isEmpty()) {
+            if (sliceIds_.isEmpty()) {
+              sliceIds_ = other.sliceIds_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureSlicesIsMutable();
-              slices_.addAll(other.slices_);
+              ensureSliceIdsIsMutable();
+              sliceIds_.addAll(other.sliceIds_);
             }
             onChanged();
           }
         } else {
-          if (!other.slices_.isEmpty()) {
-            if (slicesBuilder_.isEmpty()) {
-              slicesBuilder_.dispose();
-              slicesBuilder_ = null;
-              slices_ = other.slices_;
+          if (!other.sliceIds_.isEmpty()) {
+            if (sliceIdsBuilder_.isEmpty()) {
+              sliceIdsBuilder_.dispose();
+              sliceIdsBuilder_ = null;
+              sliceIds_ = other.sliceIds_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              slicesBuilder_ = 
+              sliceIdsBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSlicesFieldBuilder() : null;
+                   getSliceIdsFieldBuilder() : null;
             } else {
-              slicesBuilder_.addAllMessages(other.slices_);
+              sliceIdsBuilder_.addAllMessages(other.sliceIds_);
             }
           }
         }
@@ -34929,11 +35132,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.SliceList parsedMessage = null;
+        context.ContextOuterClass.SliceIdList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.SliceList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.SliceIdList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -34944,244 +35147,244 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.Slice> slices_ =
+      private java.util.List<context.ContextOuterClass.SliceId> sliceIds_ =
         java.util.Collections.emptyList();
-      private void ensureSlicesIsMutable() {
+      private void ensureSliceIdsIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          slices_ = new java.util.ArrayList<context.ContextOuterClass.Slice>(slices_);
+          sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>(sliceIds_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder> slicesBuilder_;
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdsBuilder_;
 
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.Slice> getSlicesList() {
-        if (slicesBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(slices_);
+      public java.util.List<context.ContextOuterClass.SliceId> getSliceIdsList() {
+        if (sliceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(sliceIds_);
         } else {
-          return slicesBuilder_.getMessageList();
+          return sliceIdsBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public int getSlicesCount() {
-        if (slicesBuilder_ == null) {
-          return slices_.size();
+      public int getSliceIdsCount() {
+        if (sliceIdsBuilder_ == null) {
+          return sliceIds_.size();
         } else {
-          return slicesBuilder_.getCount();
+          return sliceIdsBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.Slice getSlices(int index) {
-        if (slicesBuilder_ == null) {
-          return slices_.get(index);
+      public context.ContextOuterClass.SliceId getSliceIds(int index) {
+        if (sliceIdsBuilder_ == null) {
+          return sliceIds_.get(index);
         } else {
-          return slicesBuilder_.getMessage(index);
+          return sliceIdsBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder setSlices(
-          int index, context.ContextOuterClass.Slice value) {
-        if (slicesBuilder_ == null) {
+      public Builder setSliceIds(
+          int index, context.ContextOuterClass.SliceId value) {
+        if (sliceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSlicesIsMutable();
-          slices_.set(index, value);
+          ensureSliceIdsIsMutable();
+          sliceIds_.set(index, value);
           onChanged();
         } else {
-          slicesBuilder_.setMessage(index, value);
+          sliceIdsBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder setSlices(
-          int index, context.ContextOuterClass.Slice.Builder builderForValue) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
-          slices_.set(index, builderForValue.build());
+      public Builder setSliceIds(
+          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          sliceIds_.set(index, builderForValue.build());
           onChanged();
         } else {
-          slicesBuilder_.setMessage(index, builderForValue.build());
+          sliceIdsBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder addSlices(context.ContextOuterClass.Slice value) {
-        if (slicesBuilder_ == null) {
+      public Builder addSliceIds(context.ContextOuterClass.SliceId value) {
+        if (sliceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSlicesIsMutable();
-          slices_.add(value);
+          ensureSliceIdsIsMutable();
+          sliceIds_.add(value);
           onChanged();
         } else {
-          slicesBuilder_.addMessage(value);
+          sliceIdsBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder addSlices(
-          int index, context.ContextOuterClass.Slice value) {
-        if (slicesBuilder_ == null) {
+      public Builder addSliceIds(
+          int index, context.ContextOuterClass.SliceId value) {
+        if (sliceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSlicesIsMutable();
-          slices_.add(index, value);
+          ensureSliceIdsIsMutable();
+          sliceIds_.add(index, value);
           onChanged();
         } else {
-          slicesBuilder_.addMessage(index, value);
+          sliceIdsBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder addSlices(
-          context.ContextOuterClass.Slice.Builder builderForValue) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
-          slices_.add(builderForValue.build());
+      public Builder addSliceIds(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          sliceIds_.add(builderForValue.build());
           onChanged();
         } else {
-          slicesBuilder_.addMessage(builderForValue.build());
+          sliceIdsBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder addSlices(
-          int index, context.ContextOuterClass.Slice.Builder builderForValue) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
-          slices_.add(index, builderForValue.build());
+      public Builder addSliceIds(
+          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          sliceIds_.add(index, builderForValue.build());
           onChanged();
         } else {
-          slicesBuilder_.addMessage(index, builderForValue.build());
+          sliceIdsBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder addAllSlices(
-          java.lang.Iterable<? extends context.ContextOuterClass.Slice> values) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
+      public Builder addAllSliceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.SliceId> values) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, slices_);
+              values, sliceIds_);
           onChanged();
         } else {
-          slicesBuilder_.addAllMessages(values);
+          sliceIdsBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder clearSlices() {
-        if (slicesBuilder_ == null) {
-          slices_ = java.util.Collections.emptyList();
+      public Builder clearSliceIds() {
+        if (sliceIdsBuilder_ == null) {
+          sliceIds_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          slicesBuilder_.clear();
+          sliceIdsBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder removeSlices(int index) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
-          slices_.remove(index);
+      public Builder removeSliceIds(int index) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          sliceIds_.remove(index);
           onChanged();
         } else {
-          slicesBuilder_.remove(index);
+          sliceIdsBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.Slice.Builder getSlicesBuilder(
+      public context.ContextOuterClass.SliceId.Builder getSliceIdsBuilder(
           int index) {
-        return getSlicesFieldBuilder().getBuilder(index);
+        return getSliceIdsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
+      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
           int index) {
-        if (slicesBuilder_ == null) {
-          return slices_.get(index);  } else {
-          return slicesBuilder_.getMessageOrBuilder(index);
+        if (sliceIdsBuilder_ == null) {
+          return sliceIds_.get(index);  } else {
+          return sliceIdsBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
-           getSlicesOrBuilderList() {
-        if (slicesBuilder_ != null) {
-          return slicesBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+           getSliceIdsOrBuilderList() {
+        if (sliceIdsBuilder_ != null) {
+          return sliceIdsBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(slices_);
+          return java.util.Collections.unmodifiableList(sliceIds_);
         }
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.Slice.Builder addSlicesBuilder() {
-        return getSlicesFieldBuilder().addBuilder(
-            context.ContextOuterClass.Slice.getDefaultInstance());
+      public context.ContextOuterClass.SliceId.Builder addSliceIdsBuilder() {
+        return getSliceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.SliceId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.Slice.Builder addSlicesBuilder(
+      public context.ContextOuterClass.SliceId.Builder addSliceIdsBuilder(
           int index) {
-        return getSlicesFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Slice.getDefaultInstance());
+        return getSliceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.SliceId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.Slice.Builder> 
-           getSlicesBuilderList() {
-        return getSlicesFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.SliceId.Builder> 
+           getSliceIdsBuilderList() {
+        return getSliceIdsFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder> 
-          getSlicesFieldBuilder() {
-        if (slicesBuilder_ == null) {
-          slicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder>(
-                  slices_,
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
+          getSliceIdsFieldBuilder() {
+        if (sliceIdsBuilder_ == null) {
+          sliceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
+                  sliceIds_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          slices_ = null;
+          sliceIds_ = null;
         }
-        return slicesBuilder_;
+        return sliceIdsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -35196,100 +35399,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.SliceList)
+      // @@protoc_insertion_point(builder_scope:context.SliceIdList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.SliceList)
-    private static final context.ContextOuterClass.SliceList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceIdList)
+    private static final context.ContextOuterClass.SliceIdList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceIdList();
     }
 
-    public static context.ContextOuterClass.SliceList getDefaultInstance() {
+    public static context.ContextOuterClass.SliceIdList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SliceList>
-        PARSER = new com.google.protobuf.AbstractParser<SliceList>() {
+    private static final com.google.protobuf.Parser<SliceIdList>
+        PARSER = new com.google.protobuf.AbstractParser<SliceIdList>() {
       @java.lang.Override
-      public SliceList parsePartialFrom(
+      public SliceIdList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SliceList(input, extensionRegistry);
+        return new SliceIdList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SliceList> parser() {
+    public static com.google.protobuf.Parser<SliceIdList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SliceList> getParserForType() {
+    public com.google.protobuf.Parser<SliceIdList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.SliceList getDefaultInstanceForType() {
+    public context.ContextOuterClass.SliceIdList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SliceEventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.SliceEvent)
+  public interface SliceListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    boolean hasEvent();
+    java.util.List<context.ContextOuterClass.Slice> 
+        getSlicesList();
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    context.ContextOuterClass.Event getEvent();
+    context.ContextOuterClass.Slice getSlices(int index);
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
-
+    int getSlicesCount();
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
-     * @return Whether the sliceId field is set.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    boolean hasSliceId();
+    java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
+        getSlicesOrBuilderList();
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
-     * @return The sliceId.
-     */
-    context.ContextOuterClass.SliceId getSliceId();
-    /**
-     * <code>.context.SliceId slice_id = 2;</code>
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
+    context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
+        int index);
   }
   /**
-   * Protobuf type {@code context.SliceEvent}
+   * Protobuf type {@code context.SliceList}
    */
-  public static final class SliceEvent extends
+  public static final class SliceList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.SliceEvent)
-      SliceEventOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceList)
+      SliceListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SliceEvent.newBuilder() to construct.
-    private SliceEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceList.newBuilder() to construct.
+    private SliceList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SliceEvent() {
+    private SliceList() {
+      slices_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SliceEvent();
+      return new SliceList();
     }
 
     @java.lang.Override
@@ -35297,7 +35495,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SliceEvent(
+    private SliceList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -35305,6 +35503,7 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -35316,29 +35515,12 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Event.Builder subBuilder = null;
-              if (event_ != null) {
-                subBuilder = event_.toBuilder();
-              }
-              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(event_);
-                event_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              context.ContextOuterClass.SliceId.Builder subBuilder = null;
-              if (sliceId_ != null) {
-                subBuilder = sliceId_.toBuilder();
-              }
-              sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(sliceId_);
-                sliceId_ = subBuilder.buildPartial();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                slices_ = new java.util.ArrayList<context.ContextOuterClass.Slice>();
+                mutable_bitField0_ |= 0x00000001;
               }
-
+              slices_.add(
+                  input.readMessage(context.ContextOuterClass.Slice.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -35356,73 +35538,64 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          slices_ = java.util.Collections.unmodifiableList(slices_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
+      return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_SliceEvent_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.SliceEvent.class, context.ContextOuterClass.SliceEvent.Builder.class);
+              context.ContextOuterClass.SliceList.class, context.ContextOuterClass.SliceList.Builder.class);
     }
 
-    public static final int EVENT_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Event event_;
-    /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
-     */
-    @java.lang.Override
-    public boolean hasEvent() {
-      return event_ != null;
-    }
+    public static final int SLICES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Slice> slices_;
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Event getEvent() {
-      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    public java.util.List<context.ContextOuterClass.Slice> getSlicesList() {
+      return slices_;
     }
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-      return getEvent();
+    public java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
+        getSlicesOrBuilderList() {
+      return slices_;
     }
-
-    public static final int SLICE_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.SliceId sliceId_;
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
-     * @return Whether the sliceId field is set.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public boolean hasSliceId() {
-      return sliceId_ != null;
+    public int getSlicesCount() {
+      return slices_.size();
     }
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
-     * @return The sliceId.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceId getSliceId() {
-      return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+    public context.ContextOuterClass.Slice getSlices(int index) {
+      return slices_.get(index);
     }
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
-      return getSliceId();
+    public context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
+        int index) {
+      return slices_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -35439,11 +35612,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (event_ != null) {
-        output.writeMessage(1, getEvent());
-      }
-      if (sliceId_ != null) {
-        output.writeMessage(2, getSliceId());
+      for (int i = 0; i < slices_.size(); i++) {
+        output.writeMessage(1, slices_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -35454,13 +35624,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (event_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEvent());
-      }
-      if (sliceId_ != null) {
+      for (int i = 0; i < slices_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getSliceId());
+          .computeMessageSize(1, slices_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -35472,21 +35638,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.SliceEvent)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.SliceEvent other = (context.ContextOuterClass.SliceEvent) obj;
+      context.ContextOuterClass.SliceList other = (context.ContextOuterClass.SliceList) obj;
 
-      if (hasEvent() != other.hasEvent()) return false;
-      if (hasEvent()) {
-        if (!getEvent()
-            .equals(other.getEvent())) return false;
-      }
-      if (hasSliceId() != other.hasSliceId()) return false;
-      if (hasSliceId()) {
-        if (!getSliceId()
-            .equals(other.getSliceId())) return false;
-      }
+      if (!getSlicesList()
+          .equals(other.getSlicesList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -35498,82 +35656,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasEvent()) {
-        hash = (37 * hash) + EVENT_FIELD_NUMBER;
-        hash = (53 * hash) + getEvent().hashCode();
-      }
-      if (hasSliceId()) {
-        hash = (37 * hash) + SLICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceId().hashCode();
+      if (getSlicesCount() > 0) {
+        hash = (37 * hash) + SLICES_FIELD_NUMBER;
+        hash = (53 * hash) + getSlicesList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceEvent parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceEvent parseDelimitedFrom(
+    public static context.ContextOuterClass.SliceList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -35586,7 +35740,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.SliceEvent prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -35602,26 +35756,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.SliceEvent}
+     * Protobuf type {@code context.SliceList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.SliceEvent)
-        context.ContextOuterClass.SliceEventOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.SliceList)
+        context.ContextOuterClass.SliceListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_SliceEvent_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.SliceEvent.class, context.ContextOuterClass.SliceEvent.Builder.class);
+                context.ContextOuterClass.SliceList.class, context.ContextOuterClass.SliceList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.SliceEvent.newBuilder()
+      // Construct using context.ContextOuterClass.SliceList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -35634,22 +35788,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getSlicesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (eventBuilder_ == null) {
-          event_ = null;
-        } else {
-          event_ = null;
-          eventBuilder_ = null;
-        }
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = null;
+        if (slicesBuilder_ == null) {
+          slices_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          sliceId_ = null;
-          sliceIdBuilder_ = null;
+          slicesBuilder_.clear();
         }
         return this;
       }
@@ -35657,17 +35806,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceEvent getDefaultInstanceForType() {
-        return context.ContextOuterClass.SliceEvent.getDefaultInstance();
+      public context.ContextOuterClass.SliceList getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceEvent build() {
-        context.ContextOuterClass.SliceEvent result = buildPartial();
+      public context.ContextOuterClass.SliceList build() {
+        context.ContextOuterClass.SliceList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -35675,17 +35824,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceEvent buildPartial() {
-        context.ContextOuterClass.SliceEvent result = new context.ContextOuterClass.SliceEvent(this);
-        if (eventBuilder_ == null) {
-          result.event_ = event_;
-        } else {
-          result.event_ = eventBuilder_.build();
-        }
-        if (sliceIdBuilder_ == null) {
-          result.sliceId_ = sliceId_;
+      public context.ContextOuterClass.SliceList buildPartial() {
+        context.ContextOuterClass.SliceList result = new context.ContextOuterClass.SliceList(this);
+        int from_bitField0_ = bitField0_;
+        if (slicesBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            slices_ = java.util.Collections.unmodifiableList(slices_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.slices_ = slices_;
         } else {
-          result.sliceId_ = sliceIdBuilder_.build();
+          result.slices_ = slicesBuilder_.build();
         }
         onBuilt();
         return result;
@@ -35725,25 +35874,45 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.SliceEvent) {
-          return mergeFrom((context.ContextOuterClass.SliceEvent)other);
+        if (other instanceof context.ContextOuterClass.SliceList) {
+          return mergeFrom((context.ContextOuterClass.SliceList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.SliceEvent other) {
-        if (other == context.ContextOuterClass.SliceEvent.getDefaultInstance()) return this;
-        if (other.hasEvent()) {
-          mergeEvent(other.getEvent());
-        }
-        if (other.hasSliceId()) {
-          mergeSliceId(other.getSliceId());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
+      public Builder mergeFrom(context.ContextOuterClass.SliceList other) {
+        if (other == context.ContextOuterClass.SliceList.getDefaultInstance()) return this;
+        if (slicesBuilder_ == null) {
+          if (!other.slices_.isEmpty()) {
+            if (slices_.isEmpty()) {
+              slices_ = other.slices_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureSlicesIsMutable();
+              slices_.addAll(other.slices_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.slices_.isEmpty()) {
+            if (slicesBuilder_.isEmpty()) {
+              slicesBuilder_.dispose();
+              slicesBuilder_ = null;
+              slices_ = other.slices_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              slicesBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getSlicesFieldBuilder() : null;
+            } else {
+              slicesBuilder_.addAllMessages(other.slices_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
       }
 
       @java.lang.Override
@@ -35756,11 +35925,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.SliceEvent parsedMessage = null;
+        context.ContextOuterClass.SliceList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.SliceEvent) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.SliceList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -35769,243 +35938,246 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.Slice> slices_ =
+        java.util.Collections.emptyList();
+      private void ensureSlicesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          slices_ = new java.util.ArrayList<context.ContextOuterClass.Slice>(slices_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder> slicesBuilder_;
 
-      private context.ContextOuterClass.Event event_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return Whether the event field is set.
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public boolean hasEvent() {
-        return eventBuilder_ != null || event_ != null;
+      public java.util.List<context.ContextOuterClass.Slice> getSlicesList() {
+        if (slicesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(slices_);
+        } else {
+          return slicesBuilder_.getMessageList();
+        }
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return The event.
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public context.ContextOuterClass.Event getEvent() {
-        if (eventBuilder_ == null) {
-          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+      public int getSlicesCount() {
+        if (slicesBuilder_ == null) {
+          return slices_.size();
         } else {
-          return eventBuilder_.getMessage();
+          return slicesBuilder_.getCount();
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder setEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
+      public context.ContextOuterClass.Slice getSlices(int index) {
+        if (slicesBuilder_ == null) {
+          return slices_.get(index);
+        } else {
+          return slicesBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Slice slices = 1;</code>
+       */
+      public Builder setSlices(
+          int index, context.ContextOuterClass.Slice value) {
+        if (slicesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          event_ = value;
+          ensureSlicesIsMutable();
+          slices_.set(index, value);
           onChanged();
         } else {
-          eventBuilder_.setMessage(value);
+          slicesBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder setEvent(
-          context.ContextOuterClass.Event.Builder builderForValue) {
-        if (eventBuilder_ == null) {
-          event_ = builderForValue.build();
+      public Builder setSlices(
+          int index, context.ContextOuterClass.Slice.Builder builderForValue) {
+        if (slicesBuilder_ == null) {
+          ensureSlicesIsMutable();
+          slices_.set(index, builderForValue.build());
           onChanged();
         } else {
-          eventBuilder_.setMessage(builderForValue.build());
+          slicesBuilder_.setMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder mergeEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
-          if (event_ != null) {
-            event_ =
-              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
-          } else {
-            event_ = value;
+      public Builder addSlices(context.ContextOuterClass.Slice value) {
+        if (slicesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureSlicesIsMutable();
+          slices_.add(value);
           onChanged();
         } else {
-          eventBuilder_.mergeFrom(value);
+          slicesBuilder_.addMessage(value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder clearEvent() {
-        if (eventBuilder_ == null) {
-          event_ = null;
+      public Builder addSlices(
+          int index, context.ContextOuterClass.Slice value) {
+        if (slicesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSlicesIsMutable();
+          slices_.add(index, value);
           onChanged();
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          slicesBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       */
-      public context.ContextOuterClass.Event.Builder getEventBuilder() {
-        
-        onChanged();
-        return getEventFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-        if (eventBuilder_ != null) {
-          return eventBuilder_.getMessageOrBuilder();
+      public Builder addSlices(
+          context.ContextOuterClass.Slice.Builder builderForValue) {
+        if (slicesBuilder_ == null) {
+          ensureSlicesIsMutable();
+          slices_.add(builderForValue.build());
+          onChanged();
         } else {
-          return event_ == null ?
-              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+          slicesBuilder_.addMessage(builderForValue.build());
         }
+        return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
-          getEventFieldBuilder() {
-        if (eventBuilder_ == null) {
-          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
-                  getEvent(),
-                  getParentForChildren(),
-                  isClean());
-          event_ = null;
+      public Builder addSlices(
+          int index, context.ContextOuterClass.Slice.Builder builderForValue) {
+        if (slicesBuilder_ == null) {
+          ensureSlicesIsMutable();
+          slices_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          slicesBuilder_.addMessage(index, builderForValue.build());
         }
-        return eventBuilder_;
-      }
-
-      private context.ContextOuterClass.SliceId sliceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
-      /**
-       * <code>.context.SliceId slice_id = 2;</code>
-       * @return Whether the sliceId field is set.
-       */
-      public boolean hasSliceId() {
-        return sliceIdBuilder_ != null || sliceId_ != null;
+        return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
-       * @return The sliceId.
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public context.ContextOuterClass.SliceId getSliceId() {
-        if (sliceIdBuilder_ == null) {
-          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+      public Builder addAllSlices(
+          java.lang.Iterable<? extends context.ContextOuterClass.Slice> values) {
+        if (slicesBuilder_ == null) {
+          ensureSlicesIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, slices_);
+          onChanged();
         } else {
-          return sliceIdBuilder_.getMessage();
+          slicesBuilder_.addAllMessages(values);
         }
+        return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
-        if (sliceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          sliceId_ = value;
+      public Builder clearSlices() {
+        if (slicesBuilder_ == null) {
+          slices_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          sliceIdBuilder_.setMessage(value);
+          slicesBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder setSliceId(
-          context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = builderForValue.build();
+      public Builder removeSlices(int index) {
+        if (slicesBuilder_ == null) {
+          ensureSlicesIsMutable();
+          slices_.remove(index);
           onChanged();
         } else {
-          sliceIdBuilder_.setMessage(builderForValue.build());
+          slicesBuilder_.remove(index);
         }
-
         return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
-        if (sliceIdBuilder_ == null) {
-          if (sliceId_ != null) {
-            sliceId_ =
-              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
-          } else {
-            sliceId_ = value;
-          }
-          onChanged();
-        } else {
-          sliceIdBuilder_.mergeFrom(value);
+      public context.ContextOuterClass.Slice.Builder getSlicesBuilder(
+          int index) {
+        return getSlicesFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.Slice slices = 1;</code>
+       */
+      public context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
+          int index) {
+        if (slicesBuilder_ == null) {
+          return slices_.get(index);  } else {
+          return slicesBuilder_.getMessageOrBuilder(index);
         }
-
-        return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder clearSliceId() {
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = null;
-          onChanged();
+      public java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
+           getSlicesOrBuilderList() {
+        if (slicesBuilder_ != null) {
+          return slicesBuilder_.getMessageOrBuilderList();
         } else {
-          sliceId_ = null;
-          sliceIdBuilder_ = null;
+          return java.util.Collections.unmodifiableList(slices_);
         }
-
-        return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
-        
-        onChanged();
-        return getSliceIdFieldBuilder().getBuilder();
+      public context.ContextOuterClass.Slice.Builder addSlicesBuilder() {
+        return getSlicesFieldBuilder().addBuilder(
+            context.ContextOuterClass.Slice.getDefaultInstance());
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
-        if (sliceIdBuilder_ != null) {
-          return sliceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return sliceId_ == null ?
-              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
-        }
+      public context.ContextOuterClass.Slice.Builder addSlicesBuilder(
+          int index) {
+        return getSlicesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Slice.getDefaultInstance());
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
-          getSliceIdFieldBuilder() {
-        if (sliceIdBuilder_ == null) {
-          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
-                  getSliceId(),
+      public java.util.List<context.ContextOuterClass.Slice.Builder> 
+           getSlicesBuilderList() {
+        return getSlicesFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder> 
+          getSlicesFieldBuilder() {
+        if (slicesBuilder_ == null) {
+          slicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder>(
+                  slices_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          sliceId_ = null;
+          slices_ = null;
         }
-        return sliceIdBuilder_;
+        return slicesBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -36020,89 +36192,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.SliceEvent)
+      // @@protoc_insertion_point(builder_scope:context.SliceList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.SliceEvent)
-    private static final context.ContextOuterClass.SliceEvent DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceList)
+    private static final context.ContextOuterClass.SliceList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceEvent();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceList();
     }
 
-    public static context.ContextOuterClass.SliceEvent getDefaultInstance() {
+    public static context.ContextOuterClass.SliceList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SliceEvent>
-        PARSER = new com.google.protobuf.AbstractParser<SliceEvent>() {
+    private static final com.google.protobuf.Parser<SliceList>
+        PARSER = new com.google.protobuf.AbstractParser<SliceList>() {
       @java.lang.Override
-      public SliceEvent parsePartialFrom(
+      public SliceList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SliceEvent(input, extensionRegistry);
+        return new SliceList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SliceEvent> parser() {
+    public static com.google.protobuf.Parser<SliceList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SliceEvent> getParserForType() {
+    public com.google.protobuf.Parser<SliceList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.SliceEvent getDefaultInstanceForType() {
+    public context.ContextOuterClass.SliceList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionId)
+  public interface SliceEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceEvent)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
-     * @return Whether the connectionUuid field is set.
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
-    boolean hasConnectionUuid();
+    boolean hasEvent();
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
-     * @return The connectionUuid.
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
-    context.ContextOuterClass.Uuid getConnectionUuid();
+    context.ContextOuterClass.Event getEvent();
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
+     * <code>.context.Event event = 1;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder();
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+
+    /**
+     * <code>.context.SliceId slice_id = 2;</code>
+     * @return Whether the sliceId field is set.
+     */
+    boolean hasSliceId();
+    /**
+     * <code>.context.SliceId slice_id = 2;</code>
+     * @return The sliceId.
+     */
+    context.ContextOuterClass.SliceId getSliceId();
+    /**
+     * <code>.context.SliceId slice_id = 2;</code>
+     */
+    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
   }
   /**
-   * <pre>
-   * ----- Connection ----------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.ConnectionId}
+   * Protobuf type {@code context.SliceEvent}
    */
-  public static final class ConnectionId extends
+  public static final class SliceEvent extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionId)
-      ConnectionIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceEvent)
+      SliceEventOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionId.newBuilder() to construct.
-    private ConnectionId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceEvent.newBuilder() to construct.
+    private SliceEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionId() {
+    private SliceEvent() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionId();
+      return new SliceEvent();
     }
 
     @java.lang.Override
@@ -36110,7 +36293,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionId(
+    private SliceEvent(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -36129,14 +36312,27 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (connectionUuid_ != null) {
-                subBuilder = connectionUuid_.toBuilder();
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
               }
-              connectionUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(connectionUuid_);
-                connectionUuid_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.SliceId.Builder subBuilder = null;
+              if (sliceId_ != null) {
+                subBuilder = sliceId_.toBuilder();
+              }
+              sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(sliceId_);
+                sliceId_ = subBuilder.buildPartial();
               }
 
               break;
@@ -36162,41 +36358,67 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
+      return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionId_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceEvent_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
+              context.ContextOuterClass.SliceEvent.class, context.ContextOuterClass.SliceEvent.Builder.class);
     }
 
-    public static final int CONNECTION_UUID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Uuid connectionUuid_;
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
-     * @return Whether the connectionUuid field is set.
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
     @java.lang.Override
-    public boolean hasConnectionUuid() {
-      return connectionUuid_ != null;
+    public boolean hasEvent() {
+      return event_ != null;
     }
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
-     * @return The connectionUuid.
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getConnectionUuid() {
-      return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
     }
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
+     * <code>.context.Event event = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
-      return getConnectionUuid();
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
+    }
+
+    public static final int SLICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.SliceId sliceId_;
+    /**
+     * <code>.context.SliceId slice_id = 2;</code>
+     * @return Whether the sliceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasSliceId() {
+      return sliceId_ != null;
+    }
+    /**
+     * <code>.context.SliceId slice_id = 2;</code>
+     * @return The sliceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceId getSliceId() {
+      return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+    }
+    /**
+     * <code>.context.SliceId slice_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+      return getSliceId();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -36213,8 +36435,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (connectionUuid_ != null) {
-        output.writeMessage(1, getConnectionUuid());
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
+      }
+      if (sliceId_ != null) {
+        output.writeMessage(2, getSliceId());
       }
       unknownFields.writeTo(output);
     }
@@ -36225,13 +36450,17 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (connectionUuid_ != null) {
+      if (event_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getConnectionUuid());
+          .computeMessageSize(1, getEvent());
       }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
+      if (sliceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getSliceId());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
     }
 
     @java.lang.Override
@@ -36239,15 +36468,20 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionId)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceEvent)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionId other = (context.ContextOuterClass.ConnectionId) obj;
+      context.ContextOuterClass.SliceEvent other = (context.ContextOuterClass.SliceEvent) obj;
 
-      if (hasConnectionUuid() != other.hasConnectionUuid()) return false;
-      if (hasConnectionUuid()) {
-        if (!getConnectionUuid()
-            .equals(other.getConnectionUuid())) return false;
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
+      }
+      if (hasSliceId() != other.hasSliceId()) return false;
+      if (hasSliceId()) {
+        if (!getSliceId()
+            .equals(other.getSliceId())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -36260,78 +36494,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasConnectionUuid()) {
-        hash = (37 * hash) + CONNECTION_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionUuid().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
+      }
+      if (hasSliceId()) {
+        hash = (37 * hash) + SLICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceId().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceEvent parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceEvent parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionId parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceEvent parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionId parseDelimitedFrom(
+    public static context.ContextOuterClass.SliceEvent parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -36344,7 +36582,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionId prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceEvent prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -36360,30 +36598,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Connection ----------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.ConnectionId}
+     * Protobuf type {@code context.SliceEvent}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionId)
-        context.ContextOuterClass.ConnectionIdOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.SliceEvent)
+        context.ContextOuterClass.SliceEventOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionId_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceEvent_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
+                context.ContextOuterClass.SliceEvent.class, context.ContextOuterClass.SliceEvent.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionId.newBuilder()
+      // Construct using context.ContextOuterClass.SliceEvent.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -36401,11 +36635,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (connectionUuidBuilder_ == null) {
-          connectionUuid_ = null;
+        if (eventBuilder_ == null) {
+          event_ = null;
         } else {
-          connectionUuid_ = null;
-          connectionUuidBuilder_ = null;
+          event_ = null;
+          eventBuilder_ = null;
+        }
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
+        } else {
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
         }
         return this;
       }
@@ -36413,17 +36653,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionId.getDefaultInstance();
+      public context.ContextOuterClass.SliceEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceEvent.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionId build() {
-        context.ContextOuterClass.ConnectionId result = buildPartial();
+      public context.ContextOuterClass.SliceEvent build() {
+        context.ContextOuterClass.SliceEvent result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -36431,12 +36671,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionId buildPartial() {
-        context.ContextOuterClass.ConnectionId result = new context.ContextOuterClass.ConnectionId(this);
-        if (connectionUuidBuilder_ == null) {
-          result.connectionUuid_ = connectionUuid_;
+      public context.ContextOuterClass.SliceEvent buildPartial() {
+        context.ContextOuterClass.SliceEvent result = new context.ContextOuterClass.SliceEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
         } else {
-          result.connectionUuid_ = connectionUuidBuilder_.build();
+          result.event_ = eventBuilder_.build();
+        }
+        if (sliceIdBuilder_ == null) {
+          result.sliceId_ = sliceId_;
+        } else {
+          result.sliceId_ = sliceIdBuilder_.build();
         }
         onBuilt();
         return result;
@@ -36476,18 +36721,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionId) {
-          return mergeFrom((context.ContextOuterClass.ConnectionId)other);
+        if (other instanceof context.ContextOuterClass.SliceEvent) {
+          return mergeFrom((context.ContextOuterClass.SliceEvent)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionId other) {
-        if (other == context.ContextOuterClass.ConnectionId.getDefaultInstance()) return this;
-        if (other.hasConnectionUuid()) {
-          mergeConnectionUuid(other.getConnectionUuid());
+      public Builder mergeFrom(context.ContextOuterClass.SliceEvent other) {
+        if (other == context.ContextOuterClass.SliceEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
+        }
+        if (other.hasSliceId()) {
+          mergeSliceId(other.getSliceId());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -36504,11 +36752,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionId parsedMessage = null;
+        context.ContextOuterClass.SliceEvent parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionId) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.SliceEvent) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -36518,214 +36766,339 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private context.ContextOuterClass.Uuid connectionUuid_;
+      private context.ContextOuterClass.Event event_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> connectionUuidBuilder_;
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
-       * @return Whether the connectionUuid field is set.
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
        */
-      public boolean hasConnectionUuid() {
-        return connectionUuidBuilder_ != null || connectionUuid_ != null;
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
-       * @return The connectionUuid.
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
        */
-      public context.ContextOuterClass.Uuid getConnectionUuid() {
-        if (connectionUuidBuilder_ == null) {
-          return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         } else {
-          return connectionUuidBuilder_.getMessage();
+          return eventBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setConnectionUuid(context.ContextOuterClass.Uuid value) {
-        if (connectionUuidBuilder_ == null) {
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          connectionUuid_ = value;
+          event_ = value;
           onChanged();
         } else {
-          connectionUuidBuilder_.setMessage(value);
+          eventBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setConnectionUuid(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (connectionUuidBuilder_ == null) {
-          connectionUuid_ = builderForValue.build();
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
           onChanged();
         } else {
-          connectionUuidBuilder_.setMessage(builderForValue.build());
+          eventBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder mergeConnectionUuid(context.ContextOuterClass.Uuid value) {
-        if (connectionUuidBuilder_ == null) {
-          if (connectionUuid_ != null) {
-            connectionUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(connectionUuid_).mergeFrom(value).buildPartial();
+      public Builder mergeEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (event_ != null) {
+            event_ =
+              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
           } else {
-            connectionUuid_ = value;
+            event_ = value;
           }
           onChanged();
         } else {
-          connectionUuidBuilder_.mergeFrom(value);
+          eventBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder clearConnectionUuid() {
-        if (connectionUuidBuilder_ == null) {
-          connectionUuid_ = null;
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
           onChanged();
         } else {
-          connectionUuid_ = null;
-          connectionUuidBuilder_ = null;
+          event_ = null;
+          eventBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getConnectionUuidBuilder() {
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
         
         onChanged();
-        return getConnectionUuidFieldBuilder().getBuilder();
+        return getEventFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
-        if (connectionUuidBuilder_ != null) {
-          return connectionUuidBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
         } else {
-          return connectionUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getConnectionUuidFieldBuilder() {
-        if (connectionUuidBuilder_ == null) {
-          connectionUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getConnectionUuid(),
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
+          getEventFieldBuilder() {
+        if (eventBuilder_ == null) {
+          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
+                  getEvent(),
                   getParentForChildren(),
                   isClean());
-          connectionUuid_ = null;
+          event_ = null;
         }
-        return connectionUuidBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
+        return eventBuilder_;
       }
 
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
+      private context.ContextOuterClass.SliceId sliceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       * @return Whether the sliceId field is set.
+       */
+      public boolean hasSliceId() {
+        return sliceIdBuilder_ != null || sliceId_ != null;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       * @return The sliceId.
+       */
+      public context.ContextOuterClass.SliceId getSliceId() {
+        if (sliceIdBuilder_ == null) {
+          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+        } else {
+          return sliceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       */
+      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          sliceId_ = value;
+          onChanged();
+        } else {
+          sliceIdBuilder_.setMessage(value);
+        }
 
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       */
+      public Builder setSliceId(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          sliceIdBuilder_.setMessage(builderForValue.build());
+        }
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionId)
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       */
+      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (sliceId_ != null) {
+            sliceId_ =
+              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
+          } else {
+            sliceId_ = value;
+          }
+          onChanged();
+        } else {
+          sliceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       */
+      public Builder clearSliceId() {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
+          onChanged();
+        } else {
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       */
+      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
+        
+        onChanged();
+        return getSliceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       */
+      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+        if (sliceIdBuilder_ != null) {
+          return sliceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return sliceId_ == null ?
+              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+        }
+      }
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
+          getSliceIdFieldBuilder() {
+        if (sliceIdBuilder_ == null) {
+          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
+                  getSliceId(),
+                  getParentForChildren(),
+                  isClean());
+          sliceId_ = null;
+        }
+        return sliceIdBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.SliceEvent)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionId)
-    private static final context.ContextOuterClass.ConnectionId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceEvent)
+    private static final context.ContextOuterClass.SliceEvent DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceEvent();
     }
 
-    public static context.ContextOuterClass.ConnectionId getDefaultInstance() {
+    public static context.ContextOuterClass.SliceEvent getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionId>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionId>() {
+    private static final com.google.protobuf.Parser<SliceEvent>
+        PARSER = new com.google.protobuf.AbstractParser<SliceEvent>() {
       @java.lang.Override
-      public ConnectionId parsePartialFrom(
+      public SliceEvent parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionId(input, extensionRegistry);
+        return new SliceEvent(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionId> parser() {
+    public static com.google.protobuf.Parser<SliceEvent> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionId> getParserForType() {
+    public com.google.protobuf.Parser<SliceEvent> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
+    public context.ContextOuterClass.SliceEvent getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionSettings_L0OrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L0)
+  public interface ConnectionIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionId)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>string lsp_symbolic_name = 1;</code>
-     * @return The lspSymbolicName.
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return Whether the connectionUuid field is set.
      */
-    java.lang.String getLspSymbolicName();
+    boolean hasConnectionUuid();
     /**
-     * <code>string lsp_symbolic_name = 1;</code>
-     * @return The bytes for lspSymbolicName.
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return The connectionUuid.
      */
-    com.google.protobuf.ByteString
-        getLspSymbolicNameBytes();
+    context.ContextOuterClass.Uuid getConnectionUuid();
+    /**
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder();
   }
   /**
-   * Protobuf type {@code context.ConnectionSettings_L0}
+   * <pre>
+   * ----- Connection ----------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.ConnectionId}
    */
-  public static final class ConnectionSettings_L0 extends
+  public static final class ConnectionId extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L0)
-      ConnectionSettings_L0OrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionId)
+      ConnectionIdOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionSettings_L0.newBuilder() to construct.
-    private ConnectionSettings_L0(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionId.newBuilder() to construct.
+    private ConnectionId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionSettings_L0() {
-      lspSymbolicName_ = "";
+    private ConnectionId() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionSettings_L0();
+      return new ConnectionId();
     }
 
     @java.lang.Override
@@ -36733,7 +37106,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionSettings_L0(
+    private ConnectionId(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -36752,9 +37125,16 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              java.lang.String s = input.readStringRequireUtf8();
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (connectionUuid_ != null) {
+                subBuilder = connectionUuid_.toBuilder();
+              }
+              connectionUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(connectionUuid_);
+                connectionUuid_ = subBuilder.buildPartial();
+              }
 
-              lspSymbolicName_ = s;
               break;
             }
             default: {
@@ -36778,57 +37158,45 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionId_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionSettings_L0.class, context.ContextOuterClass.ConnectionSettings_L0.Builder.class);
+              context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
     }
 
-    public static final int LSP_SYMBOLIC_NAME_FIELD_NUMBER = 1;
-    private volatile java.lang.Object lspSymbolicName_;
+    public static final int CONNECTION_UUID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid connectionUuid_;
     /**
-     * <code>string lsp_symbolic_name = 1;</code>
-     * @return The lspSymbolicName.
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return Whether the connectionUuid field is set.
      */
     @java.lang.Override
-    public java.lang.String getLspSymbolicName() {
-      java.lang.Object ref = lspSymbolicName_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        lspSymbolicName_ = s;
-        return s;
-      }
+    public boolean hasConnectionUuid() {
+      return connectionUuid_ != null;
     }
     /**
-     * <code>string lsp_symbolic_name = 1;</code>
-     * @return The bytes for lspSymbolicName.
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return The connectionUuid.
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getLspSymbolicNameBytes() {
-      java.lang.Object ref = lspSymbolicName_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        lspSymbolicName_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public context.ContextOuterClass.Uuid getConnectionUuid() {
+      return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
     }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
+    /**
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
+      return getConnectionUuid();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
     public final boolean isInitialized() {
       byte isInitialized = memoizedIsInitialized;
       if (isInitialized == 1) return true;
@@ -36841,8 +37209,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (!getLspSymbolicNameBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, lspSymbolicName_);
+      if (connectionUuid_ != null) {
+        output.writeMessage(1, getConnectionUuid());
       }
       unknownFields.writeTo(output);
     }
@@ -36853,8 +37221,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (!getLspSymbolicNameBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, lspSymbolicName_);
+      if (connectionUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getConnectionUuid());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -36866,13 +37235,16 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L0)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionId)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionSettings_L0 other = (context.ContextOuterClass.ConnectionSettings_L0) obj;
+      context.ContextOuterClass.ConnectionId other = (context.ContextOuterClass.ConnectionId) obj;
 
-      if (!getLspSymbolicName()
-          .equals(other.getLspSymbolicName())) return false;
+      if (hasConnectionUuid() != other.hasConnectionUuid()) return false;
+      if (hasConnectionUuid()) {
+        if (!getConnectionUuid()
+            .equals(other.getConnectionUuid())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -36884,76 +37256,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + LSP_SYMBOLIC_NAME_FIELD_NUMBER;
-      hash = (53 * hash) + getLspSymbolicName().hashCode();
+      if (hasConnectionUuid()) {
+        hash = (37 * hash) + CONNECTION_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionUuid().hashCode();
+      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionId parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionId parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionId parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionId parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -36966,7 +37340,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L0 prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionId prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -36982,26 +37356,30 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionSettings_L0}
+     * <pre>
+     * ----- Connection ----------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.ConnectionId}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L0)
-        context.ContextOuterClass.ConnectionSettings_L0OrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionId)
+        context.ContextOuterClass.ConnectionIdOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionId_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionSettings_L0.class, context.ContextOuterClass.ConnectionSettings_L0.Builder.class);
+                context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionSettings_L0.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionId.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -37019,25 +37397,29 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        lspSymbolicName_ = "";
-
+        if (connectionUuidBuilder_ == null) {
+          connectionUuid_ = null;
+        } else {
+          connectionUuid_ = null;
+          connectionUuidBuilder_ = null;
+        }
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionId.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L0 build() {
-        context.ContextOuterClass.ConnectionSettings_L0 result = buildPartial();
+      public context.ContextOuterClass.ConnectionId build() {
+        context.ContextOuterClass.ConnectionId result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -37045,9 +37427,13 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L0 buildPartial() {
-        context.ContextOuterClass.ConnectionSettings_L0 result = new context.ContextOuterClass.ConnectionSettings_L0(this);
-        result.lspSymbolicName_ = lspSymbolicName_;
+      public context.ContextOuterClass.ConnectionId buildPartial() {
+        context.ContextOuterClass.ConnectionId result = new context.ContextOuterClass.ConnectionId(this);
+        if (connectionUuidBuilder_ == null) {
+          result.connectionUuid_ = connectionUuid_;
+        } else {
+          result.connectionUuid_ = connectionUuidBuilder_.build();
+        }
         onBuilt();
         return result;
       }
@@ -37086,19 +37472,18 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionSettings_L0) {
-          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L0)other);
+        if (other instanceof context.ContextOuterClass.ConnectionId) {
+          return mergeFrom((context.ContextOuterClass.ConnectionId)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L0 other) {
-        if (other == context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance()) return this;
-        if (!other.getLspSymbolicName().isEmpty()) {
-          lspSymbolicName_ = other.lspSymbolicName_;
-          onChanged();
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionId other) {
+        if (other == context.ContextOuterClass.ConnectionId.getDefaultInstance()) return this;
+        if (other.hasConnectionUuid()) {
+          mergeConnectionUuid(other.getConnectionUuid());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -37115,11 +37500,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionSettings_L0 parsedMessage = null;
+        context.ContextOuterClass.ConnectionId parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L0) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionId) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -37129,208 +37514,214 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private java.lang.Object lspSymbolicName_ = "";
+      private context.ContextOuterClass.Uuid connectionUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> connectionUuidBuilder_;
       /**
-       * <code>string lsp_symbolic_name = 1;</code>
-       * @return The lspSymbolicName.
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       * @return Whether the connectionUuid field is set.
        */
-      public java.lang.String getLspSymbolicName() {
-        java.lang.Object ref = lspSymbolicName_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          lspSymbolicName_ = s;
-          return s;
+      public boolean hasConnectionUuid() {
+        return connectionUuidBuilder_ != null || connectionUuid_ != null;
+      }
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       * @return The connectionUuid.
+       */
+      public context.ContextOuterClass.Uuid getConnectionUuid() {
+        if (connectionUuidBuilder_ == null) {
+          return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
         } else {
-          return (java.lang.String) ref;
+          return connectionUuidBuilder_.getMessage();
         }
       }
       /**
-       * <code>string lsp_symbolic_name = 1;</code>
-       * @return The bytes for lspSymbolicName.
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public com.google.protobuf.ByteString
-          getLspSymbolicNameBytes() {
-        java.lang.Object ref = lspSymbolicName_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          lspSymbolicName_ = b;
-          return b;
+      public Builder setConnectionUuid(context.ContextOuterClass.Uuid value) {
+        if (connectionUuidBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          connectionUuid_ = value;
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          connectionUuidBuilder_.setMessage(value);
         }
+
+        return this;
       }
       /**
-       * <code>string lsp_symbolic_name = 1;</code>
-       * @param value The lspSymbolicName to set.
-       * @return This builder for chaining.
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public Builder setLspSymbolicName(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        lspSymbolicName_ = value;
-        onChanged();
+      public Builder setConnectionUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (connectionUuidBuilder_ == null) {
+          connectionUuid_ = builderForValue.build();
+          onChanged();
+        } else {
+          connectionUuidBuilder_.setMessage(builderForValue.build());
+        }
+
         return this;
       }
       /**
-       * <code>string lsp_symbolic_name = 1;</code>
-       * @return This builder for chaining.
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public Builder clearLspSymbolicName() {
-        
-        lspSymbolicName_ = getDefaultInstance().getLspSymbolicName();
-        onChanged();
+      public Builder mergeConnectionUuid(context.ContextOuterClass.Uuid value) {
+        if (connectionUuidBuilder_ == null) {
+          if (connectionUuid_ != null) {
+            connectionUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(connectionUuid_).mergeFrom(value).buildPartial();
+          } else {
+            connectionUuid_ = value;
+          }
+          onChanged();
+        } else {
+          connectionUuidBuilder_.mergeFrom(value);
+        }
+
         return this;
       }
       /**
-       * <code>string lsp_symbolic_name = 1;</code>
-       * @param value The bytes for lspSymbolicName to set.
-       * @return This builder for chaining.
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public Builder setLspSymbolicNameBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        lspSymbolicName_ = value;
-        onChanged();
+      public Builder clearConnectionUuid() {
+        if (connectionUuidBuilder_ == null) {
+          connectionUuid_ = null;
+          onChanged();
+        } else {
+          connectionUuid_ = null;
+          connectionUuidBuilder_ = null;
+        }
+
         return this;
       }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getConnectionUuidBuilder() {
+        
+        onChanged();
+        return getConnectionUuidFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       */
+      public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
+        if (connectionUuidBuilder_ != null) {
+          return connectionUuidBuilder_.getMessageOrBuilder();
+        } else {
+          return connectionUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
+        }
+      }
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getConnectionUuidFieldBuilder() {
+        if (connectionUuidBuilder_ == null) {
+          connectionUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getConnectionUuid(),
+                  getParentForChildren(),
+                  isClean());
+          connectionUuid_ = null;
+        }
+        return connectionUuidBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
       }
 
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L0)
+
+      // @@protoc_insertion_point(builder_scope:context.ConnectionId)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L0)
-    private static final context.ContextOuterClass.ConnectionSettings_L0 DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionId)
+    private static final context.ContextOuterClass.ConnectionId DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L0();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionId();
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionId getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionSettings_L0>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L0>() {
+    private static final com.google.protobuf.Parser<ConnectionId>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionId>() {
       @java.lang.Override
-      public ConnectionSettings_L0 parsePartialFrom(
+      public ConnectionId parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionSettings_L0(input, extensionRegistry);
+        return new ConnectionId(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionSettings_L0> parser() {
+    public static com.google.protobuf.Parser<ConnectionId> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionSettings_L0> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionId> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionSettings_L2OrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L2)
+  public interface ConnectionSettings_L0OrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L0)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>string src_mac_address = 1;</code>
-     * @return The srcMacAddress.
-     */
-    java.lang.String getSrcMacAddress();
-    /**
-     * <code>string src_mac_address = 1;</code>
-     * @return The bytes for srcMacAddress.
-     */
-    com.google.protobuf.ByteString
-        getSrcMacAddressBytes();
-
-    /**
-     * <code>string dst_mac_address = 2;</code>
-     * @return The dstMacAddress.
+     * <code>string lsp_symbolic_name = 1;</code>
+     * @return The lspSymbolicName.
      */
-    java.lang.String getDstMacAddress();
+    java.lang.String getLspSymbolicName();
     /**
-     * <code>string dst_mac_address = 2;</code>
-     * @return The bytes for dstMacAddress.
+     * <code>string lsp_symbolic_name = 1;</code>
+     * @return The bytes for lspSymbolicName.
      */
     com.google.protobuf.ByteString
-        getDstMacAddressBytes();
-
-    /**
-     * <code>uint32 ether_type = 3;</code>
-     * @return The etherType.
-     */
-    int getEtherType();
-
-    /**
-     * <code>uint32 vlan_id = 4;</code>
-     * @return The vlanId.
-     */
-    int getVlanId();
-
-    /**
-     * <code>uint32 mpls_label = 5;</code>
-     * @return The mplsLabel.
-     */
-    int getMplsLabel();
-
-    /**
-     * <code>uint32 mpls_traffic_class = 6;</code>
-     * @return The mplsTrafficClass.
-     */
-    int getMplsTrafficClass();
+        getLspSymbolicNameBytes();
   }
   /**
-   * Protobuf type {@code context.ConnectionSettings_L2}
+   * Protobuf type {@code context.ConnectionSettings_L0}
    */
-  public static final class ConnectionSettings_L2 extends
+  public static final class ConnectionSettings_L0 extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L2)
-      ConnectionSettings_L2OrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L0)
+      ConnectionSettings_L0OrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionSettings_L2.newBuilder() to construct.
-    private ConnectionSettings_L2(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings_L0.newBuilder() to construct.
+    private ConnectionSettings_L0(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionSettings_L2() {
-      srcMacAddress_ = "";
-      dstMacAddress_ = "";
+    private ConnectionSettings_L0() {
+      lspSymbolicName_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionSettings_L2();
+      return new ConnectionSettings_L0();
     }
 
     @java.lang.Override
@@ -37338,7 +37729,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionSettings_L2(
+    private ConnectionSettings_L0(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -37359,33 +37750,7 @@ public final class ContextOuterClass {
             case 10: {
               java.lang.String s = input.readStringRequireUtf8();
 
-              srcMacAddress_ = s;
-              break;
-            }
-            case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              dstMacAddress_ = s;
-              break;
-            }
-            case 24: {
-
-              etherType_ = input.readUInt32();
-              break;
-            }
-            case 32: {
-
-              vlanId_ = input.readUInt32();
-              break;
-            }
-            case 40: {
-
-              mplsLabel_ = input.readUInt32();
-              break;
-            }
-            case 48: {
-
-              mplsTrafficClass_ = input.readUInt32();
+              lspSymbolicName_ = s;
               break;
             }
             default: {
@@ -37409,199 +37774,83 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionSettings_L2.class, context.ContextOuterClass.ConnectionSettings_L2.Builder.class);
+              context.ContextOuterClass.ConnectionSettings_L0.class, context.ContextOuterClass.ConnectionSettings_L0.Builder.class);
     }
 
-    public static final int SRC_MAC_ADDRESS_FIELD_NUMBER = 1;
-    private volatile java.lang.Object srcMacAddress_;
+    public static final int LSP_SYMBOLIC_NAME_FIELD_NUMBER = 1;
+    private volatile java.lang.Object lspSymbolicName_;
     /**
-     * <code>string src_mac_address = 1;</code>
-     * @return The srcMacAddress.
+     * <code>string lsp_symbolic_name = 1;</code>
+     * @return The lspSymbolicName.
      */
     @java.lang.Override
-    public java.lang.String getSrcMacAddress() {
-      java.lang.Object ref = srcMacAddress_;
+    public java.lang.String getLspSymbolicName() {
+      java.lang.Object ref = lspSymbolicName_;
       if (ref instanceof java.lang.String) {
         return (java.lang.String) ref;
       } else {
         com.google.protobuf.ByteString bs = 
             (com.google.protobuf.ByteString) ref;
         java.lang.String s = bs.toStringUtf8();
-        srcMacAddress_ = s;
+        lspSymbolicName_ = s;
         return s;
       }
     }
     /**
-     * <code>string src_mac_address = 1;</code>
-     * @return The bytes for srcMacAddress.
+     * <code>string lsp_symbolic_name = 1;</code>
+     * @return The bytes for lspSymbolicName.
      */
     @java.lang.Override
     public com.google.protobuf.ByteString
-        getSrcMacAddressBytes() {
-      java.lang.Object ref = srcMacAddress_;
+        getLspSymbolicNameBytes() {
+      java.lang.Object ref = lspSymbolicName_;
       if (ref instanceof java.lang.String) {
         com.google.protobuf.ByteString b = 
             com.google.protobuf.ByteString.copyFromUtf8(
                 (java.lang.String) ref);
-        srcMacAddress_ = b;
+        lspSymbolicName_ = b;
         return b;
       } else {
         return (com.google.protobuf.ByteString) ref;
       }
     }
 
-    public static final int DST_MAC_ADDRESS_FIELD_NUMBER = 2;
-    private volatile java.lang.Object dstMacAddress_;
-    /**
-     * <code>string dst_mac_address = 2;</code>
-     * @return The dstMacAddress.
-     */
+    private byte memoizedIsInitialized = -1;
     @java.lang.Override
-    public java.lang.String getDstMacAddress() {
-      java.lang.Object ref = dstMacAddress_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        dstMacAddress_ = s;
-        return s;
-      }
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
     }
-    /**
-     * <code>string dst_mac_address = 2;</code>
-     * @return The bytes for dstMacAddress.
-     */
+
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getDstMacAddressBytes() {
-      java.lang.Object ref = dstMacAddress_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        dstMacAddress_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (!getLspSymbolicNameBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, lspSymbolicName_);
       }
+      unknownFields.writeTo(output);
     }
 
-    public static final int ETHER_TYPE_FIELD_NUMBER = 3;
-    private int etherType_;
-    /**
-     * <code>uint32 ether_type = 3;</code>
-     * @return The etherType.
-     */
     @java.lang.Override
-    public int getEtherType() {
-      return etherType_;
-    }
-
-    public static final int VLAN_ID_FIELD_NUMBER = 4;
-    private int vlanId_;
-    /**
-     * <code>uint32 vlan_id = 4;</code>
-     * @return The vlanId.
-     */
-    @java.lang.Override
-    public int getVlanId() {
-      return vlanId_;
-    }
-
-    public static final int MPLS_LABEL_FIELD_NUMBER = 5;
-    private int mplsLabel_;
-    /**
-     * <code>uint32 mpls_label = 5;</code>
-     * @return The mplsLabel.
-     */
-    @java.lang.Override
-    public int getMplsLabel() {
-      return mplsLabel_;
-    }
-
-    public static final int MPLS_TRAFFIC_CLASS_FIELD_NUMBER = 6;
-    private int mplsTrafficClass_;
-    /**
-     * <code>uint32 mpls_traffic_class = 6;</code>
-     * @return The mplsTrafficClass.
-     */
-    @java.lang.Override
-    public int getMplsTrafficClass() {
-      return mplsTrafficClass_;
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (!getSrcMacAddressBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, srcMacAddress_);
-      }
-      if (!getDstMacAddressBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, dstMacAddress_);
-      }
-      if (etherType_ != 0) {
-        output.writeUInt32(3, etherType_);
-      }
-      if (vlanId_ != 0) {
-        output.writeUInt32(4, vlanId_);
-      }
-      if (mplsLabel_ != 0) {
-        output.writeUInt32(5, mplsLabel_);
-      }
-      if (mplsTrafficClass_ != 0) {
-        output.writeUInt32(6, mplsTrafficClass_);
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
 
       size = 0;
-      if (!getSrcMacAddressBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, srcMacAddress_);
-      }
-      if (!getDstMacAddressBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, dstMacAddress_);
-      }
-      if (etherType_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(3, etherType_);
-      }
-      if (vlanId_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(4, vlanId_);
-      }
-      if (mplsLabel_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(5, mplsLabel_);
-      }
-      if (mplsTrafficClass_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(6, mplsTrafficClass_);
+      if (!getLspSymbolicNameBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, lspSymbolicName_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -37613,23 +37862,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L2)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L0)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionSettings_L2 other = (context.ContextOuterClass.ConnectionSettings_L2) obj;
+      context.ContextOuterClass.ConnectionSettings_L0 other = (context.ContextOuterClass.ConnectionSettings_L0) obj;
 
-      if (!getSrcMacAddress()
-          .equals(other.getSrcMacAddress())) return false;
-      if (!getDstMacAddress()
-          .equals(other.getDstMacAddress())) return false;
-      if (getEtherType()
-          != other.getEtherType()) return false;
-      if (getVlanId()
-          != other.getVlanId()) return false;
-      if (getMplsLabel()
-          != other.getMplsLabel()) return false;
-      if (getMplsTrafficClass()
-          != other.getMplsTrafficClass()) return false;
+      if (!getLspSymbolicName()
+          .equals(other.getLspSymbolicName())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -37641,86 +37880,76 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + SRC_MAC_ADDRESS_FIELD_NUMBER;
-      hash = (53 * hash) + getSrcMacAddress().hashCode();
-      hash = (37 * hash) + DST_MAC_ADDRESS_FIELD_NUMBER;
-      hash = (53 * hash) + getDstMacAddress().hashCode();
-      hash = (37 * hash) + ETHER_TYPE_FIELD_NUMBER;
-      hash = (53 * hash) + getEtherType();
-      hash = (37 * hash) + VLAN_ID_FIELD_NUMBER;
-      hash = (53 * hash) + getVlanId();
-      hash = (37 * hash) + MPLS_LABEL_FIELD_NUMBER;
-      hash = (53 * hash) + getMplsLabel();
-      hash = (37 * hash) + MPLS_TRAFFIC_CLASS_FIELD_NUMBER;
-      hash = (53 * hash) + getMplsTrafficClass();
+      hash = (37 * hash) + LSP_SYMBOLIC_NAME_FIELD_NUMBER;
+      hash = (53 * hash) + getLspSymbolicName().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -37733,7 +37962,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L2 prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L0 prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -37749,26 +37978,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionSettings_L2}
+     * Protobuf type {@code context.ConnectionSettings_L0}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L2)
-        context.ContextOuterClass.ConnectionSettings_L2OrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L0)
+        context.ContextOuterClass.ConnectionSettings_L0OrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionSettings_L2.class, context.ContextOuterClass.ConnectionSettings_L2.Builder.class);
+                context.ContextOuterClass.ConnectionSettings_L0.class, context.ContextOuterClass.ConnectionSettings_L0.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionSettings_L2.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings_L0.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -37786,17 +38015,7 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        srcMacAddress_ = "";
-
-        dstMacAddress_ = "";
-
-        etherType_ = 0;
-
-        vlanId_ = 0;
-
-        mplsLabel_ = 0;
-
-        mplsTrafficClass_ = 0;
+        lspSymbolicName_ = "";
 
         return this;
       }
@@ -37804,17 +38023,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L2 build() {
-        context.ContextOuterClass.ConnectionSettings_L2 result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings_L0 build() {
+        context.ContextOuterClass.ConnectionSettings_L0 result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -37822,14 +38041,9 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L2 buildPartial() {
-        context.ContextOuterClass.ConnectionSettings_L2 result = new context.ContextOuterClass.ConnectionSettings_L2(this);
-        result.srcMacAddress_ = srcMacAddress_;
-        result.dstMacAddress_ = dstMacAddress_;
-        result.etherType_ = etherType_;
-        result.vlanId_ = vlanId_;
-        result.mplsLabel_ = mplsLabel_;
-        result.mplsTrafficClass_ = mplsTrafficClass_;
+      public context.ContextOuterClass.ConnectionSettings_L0 buildPartial() {
+        context.ContextOuterClass.ConnectionSettings_L0 result = new context.ContextOuterClass.ConnectionSettings_L0(this);
+        result.lspSymbolicName_ = lspSymbolicName_;
         onBuilt();
         return result;
       }
@@ -37868,36 +38082,20 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionSettings_L2) {
-          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L2)other);
+        if (other instanceof context.ContextOuterClass.ConnectionSettings_L0) {
+          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L0)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L2 other) {
-        if (other == context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance()) return this;
-        if (!other.getSrcMacAddress().isEmpty()) {
-          srcMacAddress_ = other.srcMacAddress_;
-          onChanged();
-        }
-        if (!other.getDstMacAddress().isEmpty()) {
-          dstMacAddress_ = other.dstMacAddress_;
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L0 other) {
+        if (other == context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance()) return this;
+        if (!other.getLspSymbolicName().isEmpty()) {
+          lspSymbolicName_ = other.lspSymbolicName_;
           onChanged();
         }
-        if (other.getEtherType() != 0) {
-          setEtherType(other.getEtherType());
-        }
-        if (other.getVlanId() != 0) {
-          setVlanId(other.getVlanId());
-        }
-        if (other.getMplsLabel() != 0) {
-          setMplsLabel(other.getMplsLabel());
-        }
-        if (other.getMplsTrafficClass() != 0) {
-          setMplsTrafficClass(other.getMplsTrafficClass());
-        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -37913,11 +38111,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionSettings_L2 parsedMessage = null;
+        context.ContextOuterClass.ConnectionSettings_L0 parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L2) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L0) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -37927,278 +38125,78 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private java.lang.Object srcMacAddress_ = "";
+      private java.lang.Object lspSymbolicName_ = "";
       /**
-       * <code>string src_mac_address = 1;</code>
-       * @return The srcMacAddress.
+       * <code>string lsp_symbolic_name = 1;</code>
+       * @return The lspSymbolicName.
        */
-      public java.lang.String getSrcMacAddress() {
-        java.lang.Object ref = srcMacAddress_;
+      public java.lang.String getLspSymbolicName() {
+        java.lang.Object ref = lspSymbolicName_;
         if (!(ref instanceof java.lang.String)) {
           com.google.protobuf.ByteString bs =
               (com.google.protobuf.ByteString) ref;
           java.lang.String s = bs.toStringUtf8();
-          srcMacAddress_ = s;
+          lspSymbolicName_ = s;
           return s;
         } else {
           return (java.lang.String) ref;
         }
       }
       /**
-       * <code>string src_mac_address = 1;</code>
-       * @return The bytes for srcMacAddress.
+       * <code>string lsp_symbolic_name = 1;</code>
+       * @return The bytes for lspSymbolicName.
        */
       public com.google.protobuf.ByteString
-          getSrcMacAddressBytes() {
-        java.lang.Object ref = srcMacAddress_;
+          getLspSymbolicNameBytes() {
+        java.lang.Object ref = lspSymbolicName_;
         if (ref instanceof String) {
           com.google.protobuf.ByteString b = 
               com.google.protobuf.ByteString.copyFromUtf8(
                   (java.lang.String) ref);
-          srcMacAddress_ = b;
+          lspSymbolicName_ = b;
           return b;
         } else {
           return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>string src_mac_address = 1;</code>
-       * @param value The srcMacAddress to set.
+       * <code>string lsp_symbolic_name = 1;</code>
+       * @param value The lspSymbolicName to set.
        * @return This builder for chaining.
        */
-      public Builder setSrcMacAddress(
+      public Builder setLspSymbolicName(
           java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
   }
   
-        srcMacAddress_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string src_mac_address = 1;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearSrcMacAddress() {
-        
-        srcMacAddress_ = getDefaultInstance().getSrcMacAddress();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string src_mac_address = 1;</code>
-       * @param value The bytes for srcMacAddress to set.
-       * @return This builder for chaining.
-       */
-      public Builder setSrcMacAddressBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        srcMacAddress_ = value;
-        onChanged();
-        return this;
-      }
-
-      private java.lang.Object dstMacAddress_ = "";
-      /**
-       * <code>string dst_mac_address = 2;</code>
-       * @return The dstMacAddress.
-       */
-      public java.lang.String getDstMacAddress() {
-        java.lang.Object ref = dstMacAddress_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          dstMacAddress_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>string dst_mac_address = 2;</code>
-       * @return The bytes for dstMacAddress.
-       */
-      public com.google.protobuf.ByteString
-          getDstMacAddressBytes() {
-        java.lang.Object ref = dstMacAddress_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          dstMacAddress_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       * <code>string dst_mac_address = 2;</code>
-       * @param value The dstMacAddress to set.
-       * @return This builder for chaining.
-       */
-      public Builder setDstMacAddress(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        dstMacAddress_ = value;
+        lspSymbolicName_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>string dst_mac_address = 2;</code>
+       * <code>string lsp_symbolic_name = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder clearDstMacAddress() {
+      public Builder clearLspSymbolicName() {
         
-        dstMacAddress_ = getDefaultInstance().getDstMacAddress();
+        lspSymbolicName_ = getDefaultInstance().getLspSymbolicName();
         onChanged();
         return this;
       }
       /**
-       * <code>string dst_mac_address = 2;</code>
-       * @param value The bytes for dstMacAddress to set.
+       * <code>string lsp_symbolic_name = 1;</code>
+       * @param value The bytes for lspSymbolicName to set.
        * @return This builder for chaining.
        */
-      public Builder setDstMacAddressBytes(
+      public Builder setLspSymbolicNameBytes(
           com.google.protobuf.ByteString value) {
         if (value == null) {
     throw new NullPointerException();
   }
   checkByteStringIsUtf8(value);
         
-        dstMacAddress_ = value;
-        onChanged();
-        return this;
-      }
-
-      private int etherType_ ;
-      /**
-       * <code>uint32 ether_type = 3;</code>
-       * @return The etherType.
-       */
-      @java.lang.Override
-      public int getEtherType() {
-        return etherType_;
-      }
-      /**
-       * <code>uint32 ether_type = 3;</code>
-       * @param value The etherType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setEtherType(int value) {
-        
-        etherType_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>uint32 ether_type = 3;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearEtherType() {
-        
-        etherType_ = 0;
-        onChanged();
-        return this;
-      }
-
-      private int vlanId_ ;
-      /**
-       * <code>uint32 vlan_id = 4;</code>
-       * @return The vlanId.
-       */
-      @java.lang.Override
-      public int getVlanId() {
-        return vlanId_;
-      }
-      /**
-       * <code>uint32 vlan_id = 4;</code>
-       * @param value The vlanId to set.
-       * @return This builder for chaining.
-       */
-      public Builder setVlanId(int value) {
-        
-        vlanId_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>uint32 vlan_id = 4;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearVlanId() {
-        
-        vlanId_ = 0;
-        onChanged();
-        return this;
-      }
-
-      private int mplsLabel_ ;
-      /**
-       * <code>uint32 mpls_label = 5;</code>
-       * @return The mplsLabel.
-       */
-      @java.lang.Override
-      public int getMplsLabel() {
-        return mplsLabel_;
-      }
-      /**
-       * <code>uint32 mpls_label = 5;</code>
-       * @param value The mplsLabel to set.
-       * @return This builder for chaining.
-       */
-      public Builder setMplsLabel(int value) {
-        
-        mplsLabel_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>uint32 mpls_label = 5;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearMplsLabel() {
-        
-        mplsLabel_ = 0;
-        onChanged();
-        return this;
-      }
-
-      private int mplsTrafficClass_ ;
-      /**
-       * <code>uint32 mpls_traffic_class = 6;</code>
-       * @return The mplsTrafficClass.
-       */
-      @java.lang.Override
-      public int getMplsTrafficClass() {
-        return mplsTrafficClass_;
-      }
-      /**
-       * <code>uint32 mpls_traffic_class = 6;</code>
-       * @param value The mplsTrafficClass to set.
-       * @return This builder for chaining.
-       */
-      public Builder setMplsTrafficClass(int value) {
-        
-        mplsTrafficClass_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>uint32 mpls_traffic_class = 6;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearMplsTrafficClass() {
-        
-        mplsTrafficClass_ = 0;
+        lspSymbolicName_ = value;
         onChanged();
         return this;
       }
@@ -38215,114 +38213,120 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L2)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L0)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L2)
-    private static final context.ContextOuterClass.ConnectionSettings_L2 DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L0)
+    private static final context.ContextOuterClass.ConnectionSettings_L0 DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L2();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L0();
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionSettings_L2>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L2>() {
+    private static final com.google.protobuf.Parser<ConnectionSettings_L0>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L0>() {
       @java.lang.Override
-      public ConnectionSettings_L2 parsePartialFrom(
+      public ConnectionSettings_L0 parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionSettings_L2(input, extensionRegistry);
+        return new ConnectionSettings_L0(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionSettings_L2> parser() {
+    public static com.google.protobuf.Parser<ConnectionSettings_L0> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionSettings_L2> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionSettings_L0> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionSettings_L3OrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L3)
+  public interface ConnectionSettings_L2OrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L2)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>string src_ip_address = 1;</code>
-     * @return The srcIpAddress.
+     * <code>string src_mac_address = 1;</code>
+     * @return The srcMacAddress.
      */
-    java.lang.String getSrcIpAddress();
+    java.lang.String getSrcMacAddress();
     /**
-     * <code>string src_ip_address = 1;</code>
-     * @return The bytes for srcIpAddress.
+     * <code>string src_mac_address = 1;</code>
+     * @return The bytes for srcMacAddress.
      */
     com.google.protobuf.ByteString
-        getSrcIpAddressBytes();
+        getSrcMacAddressBytes();
 
     /**
-     * <code>string dst_ip_address = 2;</code>
-     * @return The dstIpAddress.
+     * <code>string dst_mac_address = 2;</code>
+     * @return The dstMacAddress.
      */
-    java.lang.String getDstIpAddress();
+    java.lang.String getDstMacAddress();
     /**
-     * <code>string dst_ip_address = 2;</code>
-     * @return The bytes for dstIpAddress.
+     * <code>string dst_mac_address = 2;</code>
+     * @return The bytes for dstMacAddress.
      */
     com.google.protobuf.ByteString
-        getDstIpAddressBytes();
+        getDstMacAddressBytes();
 
     /**
-     * <code>uint32 dscp = 3;</code>
-     * @return The dscp.
+     * <code>uint32 ether_type = 3;</code>
+     * @return The etherType.
      */
-    int getDscp();
+    int getEtherType();
 
     /**
-     * <code>uint32 protocol = 4;</code>
-     * @return The protocol.
+     * <code>uint32 vlan_id = 4;</code>
+     * @return The vlanId.
      */
-    int getProtocol();
+    int getVlanId();
 
     /**
-     * <code>uint32 ttl = 5;</code>
-     * @return The ttl.
+     * <code>uint32 mpls_label = 5;</code>
+     * @return The mplsLabel.
      */
-    int getTtl();
+    int getMplsLabel();
+
+    /**
+     * <code>uint32 mpls_traffic_class = 6;</code>
+     * @return The mplsTrafficClass.
+     */
+    int getMplsTrafficClass();
   }
   /**
-   * Protobuf type {@code context.ConnectionSettings_L3}
+   * Protobuf type {@code context.ConnectionSettings_L2}
    */
-  public static final class ConnectionSettings_L3 extends
+  public static final class ConnectionSettings_L2 extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L3)
-      ConnectionSettings_L3OrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L2)
+      ConnectionSettings_L2OrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionSettings_L3.newBuilder() to construct.
-    private ConnectionSettings_L3(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings_L2.newBuilder() to construct.
+    private ConnectionSettings_L2(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionSettings_L3() {
-      srcIpAddress_ = "";
-      dstIpAddress_ = "";
+    private ConnectionSettings_L2() {
+      srcMacAddress_ = "";
+      dstMacAddress_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionSettings_L3();
+      return new ConnectionSettings_L2();
     }
 
     @java.lang.Override
@@ -38330,7 +38334,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionSettings_L3(
+    private ConnectionSettings_L2(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -38351,28 +38355,33 @@ public final class ContextOuterClass {
             case 10: {
               java.lang.String s = input.readStringRequireUtf8();
 
-              srcIpAddress_ = s;
+              srcMacAddress_ = s;
               break;
             }
             case 18: {
               java.lang.String s = input.readStringRequireUtf8();
 
-              dstIpAddress_ = s;
+              dstMacAddress_ = s;
               break;
             }
             case 24: {
 
-              dscp_ = input.readUInt32();
+              etherType_ = input.readUInt32();
               break;
             }
             case 32: {
 
-              protocol_ = input.readUInt32();
+              vlanId_ = input.readUInt32();
               break;
             }
             case 40: {
 
-              ttl_ = input.readUInt32();
+              mplsLabel_ = input.readUInt32();
+              break;
+            }
+            case 48: {
+
+              mplsTrafficClass_ = input.readUInt32();
               break;
             }
             default: {
@@ -38396,124 +38405,135 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionSettings_L3.class, context.ContextOuterClass.ConnectionSettings_L3.Builder.class);
+              context.ContextOuterClass.ConnectionSettings_L2.class, context.ContextOuterClass.ConnectionSettings_L2.Builder.class);
     }
 
-    public static final int SRC_IP_ADDRESS_FIELD_NUMBER = 1;
-    private volatile java.lang.Object srcIpAddress_;
+    public static final int SRC_MAC_ADDRESS_FIELD_NUMBER = 1;
+    private volatile java.lang.Object srcMacAddress_;
     /**
-     * <code>string src_ip_address = 1;</code>
-     * @return The srcIpAddress.
+     * <code>string src_mac_address = 1;</code>
+     * @return The srcMacAddress.
      */
     @java.lang.Override
-    public java.lang.String getSrcIpAddress() {
-      java.lang.Object ref = srcIpAddress_;
+    public java.lang.String getSrcMacAddress() {
+      java.lang.Object ref = srcMacAddress_;
       if (ref instanceof java.lang.String) {
         return (java.lang.String) ref;
       } else {
         com.google.protobuf.ByteString bs = 
             (com.google.protobuf.ByteString) ref;
         java.lang.String s = bs.toStringUtf8();
-        srcIpAddress_ = s;
+        srcMacAddress_ = s;
         return s;
       }
     }
     /**
-     * <code>string src_ip_address = 1;</code>
-     * @return The bytes for srcIpAddress.
+     * <code>string src_mac_address = 1;</code>
+     * @return The bytes for srcMacAddress.
      */
     @java.lang.Override
     public com.google.protobuf.ByteString
-        getSrcIpAddressBytes() {
-      java.lang.Object ref = srcIpAddress_;
+        getSrcMacAddressBytes() {
+      java.lang.Object ref = srcMacAddress_;
       if (ref instanceof java.lang.String) {
         com.google.protobuf.ByteString b = 
             com.google.protobuf.ByteString.copyFromUtf8(
                 (java.lang.String) ref);
-        srcIpAddress_ = b;
+        srcMacAddress_ = b;
         return b;
       } else {
         return (com.google.protobuf.ByteString) ref;
       }
     }
 
-    public static final int DST_IP_ADDRESS_FIELD_NUMBER = 2;
-    private volatile java.lang.Object dstIpAddress_;
+    public static final int DST_MAC_ADDRESS_FIELD_NUMBER = 2;
+    private volatile java.lang.Object dstMacAddress_;
     /**
-     * <code>string dst_ip_address = 2;</code>
-     * @return The dstIpAddress.
+     * <code>string dst_mac_address = 2;</code>
+     * @return The dstMacAddress.
      */
     @java.lang.Override
-    public java.lang.String getDstIpAddress() {
-      java.lang.Object ref = dstIpAddress_;
+    public java.lang.String getDstMacAddress() {
+      java.lang.Object ref = dstMacAddress_;
       if (ref instanceof java.lang.String) {
         return (java.lang.String) ref;
       } else {
         com.google.protobuf.ByteString bs = 
             (com.google.protobuf.ByteString) ref;
         java.lang.String s = bs.toStringUtf8();
-        dstIpAddress_ = s;
+        dstMacAddress_ = s;
         return s;
       }
     }
     /**
-     * <code>string dst_ip_address = 2;</code>
-     * @return The bytes for dstIpAddress.
+     * <code>string dst_mac_address = 2;</code>
+     * @return The bytes for dstMacAddress.
      */
     @java.lang.Override
     public com.google.protobuf.ByteString
-        getDstIpAddressBytes() {
-      java.lang.Object ref = dstIpAddress_;
+        getDstMacAddressBytes() {
+      java.lang.Object ref = dstMacAddress_;
       if (ref instanceof java.lang.String) {
         com.google.protobuf.ByteString b = 
             com.google.protobuf.ByteString.copyFromUtf8(
                 (java.lang.String) ref);
-        dstIpAddress_ = b;
+        dstMacAddress_ = b;
         return b;
       } else {
         return (com.google.protobuf.ByteString) ref;
       }
     }
 
-    public static final int DSCP_FIELD_NUMBER = 3;
-    private int dscp_;
+    public static final int ETHER_TYPE_FIELD_NUMBER = 3;
+    private int etherType_;
     /**
-     * <code>uint32 dscp = 3;</code>
-     * @return The dscp.
+     * <code>uint32 ether_type = 3;</code>
+     * @return The etherType.
      */
     @java.lang.Override
-    public int getDscp() {
-      return dscp_;
+    public int getEtherType() {
+      return etherType_;
     }
 
-    public static final int PROTOCOL_FIELD_NUMBER = 4;
-    private int protocol_;
+    public static final int VLAN_ID_FIELD_NUMBER = 4;
+    private int vlanId_;
     /**
-     * <code>uint32 protocol = 4;</code>
-     * @return The protocol.
+     * <code>uint32 vlan_id = 4;</code>
+     * @return The vlanId.
      */
     @java.lang.Override
-    public int getProtocol() {
-      return protocol_;
+    public int getVlanId() {
+      return vlanId_;
     }
 
-    public static final int TTL_FIELD_NUMBER = 5;
-    private int ttl_;
+    public static final int MPLS_LABEL_FIELD_NUMBER = 5;
+    private int mplsLabel_;
     /**
-     * <code>uint32 ttl = 5;</code>
-     * @return The ttl.
+     * <code>uint32 mpls_label = 5;</code>
+     * @return The mplsLabel.
      */
     @java.lang.Override
-    public int getTtl() {
-      return ttl_;
+    public int getMplsLabel() {
+      return mplsLabel_;
+    }
+
+    public static final int MPLS_TRAFFIC_CLASS_FIELD_NUMBER = 6;
+    private int mplsTrafficClass_;
+    /**
+     * <code>uint32 mpls_traffic_class = 6;</code>
+     * @return The mplsTrafficClass.
+     */
+    @java.lang.Override
+    public int getMplsTrafficClass() {
+      return mplsTrafficClass_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -38530,20 +38550,23 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (!getSrcIpAddressBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, srcIpAddress_);
+      if (!getSrcMacAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, srcMacAddress_);
       }
-      if (!getDstIpAddressBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, dstIpAddress_);
+      if (!getDstMacAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, dstMacAddress_);
       }
-      if (dscp_ != 0) {
-        output.writeUInt32(3, dscp_);
+      if (etherType_ != 0) {
+        output.writeUInt32(3, etherType_);
       }
-      if (protocol_ != 0) {
-        output.writeUInt32(4, protocol_);
+      if (vlanId_ != 0) {
+        output.writeUInt32(4, vlanId_);
       }
-      if (ttl_ != 0) {
-        output.writeUInt32(5, ttl_);
+      if (mplsLabel_ != 0) {
+        output.writeUInt32(5, mplsLabel_);
+      }
+      if (mplsTrafficClass_ != 0) {
+        output.writeUInt32(6, mplsTrafficClass_);
       }
       unknownFields.writeTo(output);
     }
@@ -38554,23 +38577,27 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (!getSrcIpAddressBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, srcIpAddress_);
+      if (!getSrcMacAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, srcMacAddress_);
       }
-      if (!getDstIpAddressBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, dstIpAddress_);
+      if (!getDstMacAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, dstMacAddress_);
       }
-      if (dscp_ != 0) {
+      if (etherType_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(3, dscp_);
+          .computeUInt32Size(3, etherType_);
       }
-      if (protocol_ != 0) {
+      if (vlanId_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(4, protocol_);
+          .computeUInt32Size(4, vlanId_);
       }
-      if (ttl_ != 0) {
+      if (mplsLabel_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(5, ttl_);
+          .computeUInt32Size(5, mplsLabel_);
+      }
+      if (mplsTrafficClass_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(6, mplsTrafficClass_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -38582,21 +38609,23 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L3)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L2)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionSettings_L3 other = (context.ContextOuterClass.ConnectionSettings_L3) obj;
+      context.ContextOuterClass.ConnectionSettings_L2 other = (context.ContextOuterClass.ConnectionSettings_L2) obj;
 
-      if (!getSrcIpAddress()
-          .equals(other.getSrcIpAddress())) return false;
-      if (!getDstIpAddress()
-          .equals(other.getDstIpAddress())) return false;
-      if (getDscp()
-          != other.getDscp()) return false;
-      if (getProtocol()
-          != other.getProtocol()) return false;
-      if (getTtl()
-          != other.getTtl()) return false;
+      if (!getSrcMacAddress()
+          .equals(other.getSrcMacAddress())) return false;
+      if (!getDstMacAddress()
+          .equals(other.getDstMacAddress())) return false;
+      if (getEtherType()
+          != other.getEtherType()) return false;
+      if (getVlanId()
+          != other.getVlanId()) return false;
+      if (getMplsLabel()
+          != other.getMplsLabel()) return false;
+      if (getMplsTrafficClass()
+          != other.getMplsTrafficClass()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -38608,84 +38637,86 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + SRC_IP_ADDRESS_FIELD_NUMBER;
-      hash = (53 * hash) + getSrcIpAddress().hashCode();
-      hash = (37 * hash) + DST_IP_ADDRESS_FIELD_NUMBER;
-      hash = (53 * hash) + getDstIpAddress().hashCode();
-      hash = (37 * hash) + DSCP_FIELD_NUMBER;
-      hash = (53 * hash) + getDscp();
-      hash = (37 * hash) + PROTOCOL_FIELD_NUMBER;
-      hash = (53 * hash) + getProtocol();
-      hash = (37 * hash) + TTL_FIELD_NUMBER;
-      hash = (53 * hash) + getTtl();
+      hash = (37 * hash) + SRC_MAC_ADDRESS_FIELD_NUMBER;
+      hash = (53 * hash) + getSrcMacAddress().hashCode();
+      hash = (37 * hash) + DST_MAC_ADDRESS_FIELD_NUMBER;
+      hash = (53 * hash) + getDstMacAddress().hashCode();
+      hash = (37 * hash) + ETHER_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + getEtherType();
+      hash = (37 * hash) + VLAN_ID_FIELD_NUMBER;
+      hash = (53 * hash) + getVlanId();
+      hash = (37 * hash) + MPLS_LABEL_FIELD_NUMBER;
+      hash = (53 * hash) + getMplsLabel();
+      hash = (37 * hash) + MPLS_TRAFFIC_CLASS_FIELD_NUMBER;
+      hash = (53 * hash) + getMplsTrafficClass();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -38698,7 +38729,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L3 prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L2 prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -38714,26 +38745,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionSettings_L3}
+     * Protobuf type {@code context.ConnectionSettings_L2}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L3)
-        context.ContextOuterClass.ConnectionSettings_L3OrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L2)
+        context.ContextOuterClass.ConnectionSettings_L2OrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionSettings_L3.class, context.ContextOuterClass.ConnectionSettings_L3.Builder.class);
+                context.ContextOuterClass.ConnectionSettings_L2.class, context.ContextOuterClass.ConnectionSettings_L2.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionSettings_L3.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings_L2.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -38751,15 +38782,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        srcIpAddress_ = "";
+        srcMacAddress_ = "";
 
-        dstIpAddress_ = "";
+        dstMacAddress_ = "";
 
-        dscp_ = 0;
+        etherType_ = 0;
 
-        protocol_ = 0;
+        vlanId_ = 0;
 
-        ttl_ = 0;
+        mplsLabel_ = 0;
+
+        mplsTrafficClass_ = 0;
 
         return this;
       }
@@ -38767,17 +38800,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L3 build() {
-        context.ContextOuterClass.ConnectionSettings_L3 result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings_L2 build() {
+        context.ContextOuterClass.ConnectionSettings_L2 result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -38785,13 +38818,14 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L3 buildPartial() {
-        context.ContextOuterClass.ConnectionSettings_L3 result = new context.ContextOuterClass.ConnectionSettings_L3(this);
-        result.srcIpAddress_ = srcIpAddress_;
-        result.dstIpAddress_ = dstIpAddress_;
-        result.dscp_ = dscp_;
-        result.protocol_ = protocol_;
-        result.ttl_ = ttl_;
+      public context.ContextOuterClass.ConnectionSettings_L2 buildPartial() {
+        context.ContextOuterClass.ConnectionSettings_L2 result = new context.ContextOuterClass.ConnectionSettings_L2(this);
+        result.srcMacAddress_ = srcMacAddress_;
+        result.dstMacAddress_ = dstMacAddress_;
+        result.etherType_ = etherType_;
+        result.vlanId_ = vlanId_;
+        result.mplsLabel_ = mplsLabel_;
+        result.mplsTrafficClass_ = mplsTrafficClass_;
         onBuilt();
         return result;
       }
@@ -38830,32 +38864,35 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionSettings_L3) {
-          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L3)other);
+        if (other instanceof context.ContextOuterClass.ConnectionSettings_L2) {
+          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L2)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L3 other) {
-        if (other == context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance()) return this;
-        if (!other.getSrcIpAddress().isEmpty()) {
-          srcIpAddress_ = other.srcIpAddress_;
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L2 other) {
+        if (other == context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance()) return this;
+        if (!other.getSrcMacAddress().isEmpty()) {
+          srcMacAddress_ = other.srcMacAddress_;
           onChanged();
         }
-        if (!other.getDstIpAddress().isEmpty()) {
-          dstIpAddress_ = other.dstIpAddress_;
+        if (!other.getDstMacAddress().isEmpty()) {
+          dstMacAddress_ = other.dstMacAddress_;
           onChanged();
         }
-        if (other.getDscp() != 0) {
-          setDscp(other.getDscp());
+        if (other.getEtherType() != 0) {
+          setEtherType(other.getEtherType());
         }
-        if (other.getProtocol() != 0) {
-          setProtocol(other.getProtocol());
+        if (other.getVlanId() != 0) {
+          setVlanId(other.getVlanId());
         }
-        if (other.getTtl() != 0) {
-          setTtl(other.getTtl());
+        if (other.getMplsLabel() != 0) {
+          setMplsLabel(other.getMplsLabel());
+        }
+        if (other.getMplsTrafficClass() != 0) {
+          setMplsTrafficClass(other.getMplsTrafficClass());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -38872,11 +38909,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionSettings_L3 parsedMessage = null;
+        context.ContextOuterClass.ConnectionSettings_L2 parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L3) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L2) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -38886,247 +38923,278 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private java.lang.Object srcIpAddress_ = "";
+      private java.lang.Object srcMacAddress_ = "";
       /**
-       * <code>string src_ip_address = 1;</code>
-       * @return The srcIpAddress.
+       * <code>string src_mac_address = 1;</code>
+       * @return The srcMacAddress.
        */
-      public java.lang.String getSrcIpAddress() {
-        java.lang.Object ref = srcIpAddress_;
+      public java.lang.String getSrcMacAddress() {
+        java.lang.Object ref = srcMacAddress_;
         if (!(ref instanceof java.lang.String)) {
           com.google.protobuf.ByteString bs =
               (com.google.protobuf.ByteString) ref;
           java.lang.String s = bs.toStringUtf8();
-          srcIpAddress_ = s;
+          srcMacAddress_ = s;
           return s;
         } else {
           return (java.lang.String) ref;
         }
       }
       /**
-       * <code>string src_ip_address = 1;</code>
-       * @return The bytes for srcIpAddress.
+       * <code>string src_mac_address = 1;</code>
+       * @return The bytes for srcMacAddress.
        */
       public com.google.protobuf.ByteString
-          getSrcIpAddressBytes() {
-        java.lang.Object ref = srcIpAddress_;
+          getSrcMacAddressBytes() {
+        java.lang.Object ref = srcMacAddress_;
         if (ref instanceof String) {
           com.google.protobuf.ByteString b = 
               com.google.protobuf.ByteString.copyFromUtf8(
                   (java.lang.String) ref);
-          srcIpAddress_ = b;
+          srcMacAddress_ = b;
           return b;
         } else {
           return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>string src_ip_address = 1;</code>
-       * @param value The srcIpAddress to set.
+       * <code>string src_mac_address = 1;</code>
+       * @param value The srcMacAddress to set.
        * @return This builder for chaining.
        */
-      public Builder setSrcIpAddress(
+      public Builder setSrcMacAddress(
           java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
   }
   
-        srcIpAddress_ = value;
+        srcMacAddress_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>string src_ip_address = 1;</code>
+       * <code>string src_mac_address = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder clearSrcIpAddress() {
+      public Builder clearSrcMacAddress() {
         
-        srcIpAddress_ = getDefaultInstance().getSrcIpAddress();
+        srcMacAddress_ = getDefaultInstance().getSrcMacAddress();
         onChanged();
         return this;
       }
       /**
-       * <code>string src_ip_address = 1;</code>
-       * @param value The bytes for srcIpAddress to set.
+       * <code>string src_mac_address = 1;</code>
+       * @param value The bytes for srcMacAddress to set.
        * @return This builder for chaining.
        */
-      public Builder setSrcIpAddressBytes(
+      public Builder setSrcMacAddressBytes(
           com.google.protobuf.ByteString value) {
         if (value == null) {
     throw new NullPointerException();
   }
   checkByteStringIsUtf8(value);
         
-        srcIpAddress_ = value;
+        srcMacAddress_ = value;
         onChanged();
         return this;
       }
 
-      private java.lang.Object dstIpAddress_ = "";
+      private java.lang.Object dstMacAddress_ = "";
       /**
-       * <code>string dst_ip_address = 2;</code>
-       * @return The dstIpAddress.
+       * <code>string dst_mac_address = 2;</code>
+       * @return The dstMacAddress.
        */
-      public java.lang.String getDstIpAddress() {
-        java.lang.Object ref = dstIpAddress_;
+      public java.lang.String getDstMacAddress() {
+        java.lang.Object ref = dstMacAddress_;
         if (!(ref instanceof java.lang.String)) {
           com.google.protobuf.ByteString bs =
               (com.google.protobuf.ByteString) ref;
           java.lang.String s = bs.toStringUtf8();
-          dstIpAddress_ = s;
+          dstMacAddress_ = s;
           return s;
         } else {
           return (java.lang.String) ref;
         }
       }
       /**
-       * <code>string dst_ip_address = 2;</code>
-       * @return The bytes for dstIpAddress.
+       * <code>string dst_mac_address = 2;</code>
+       * @return The bytes for dstMacAddress.
        */
       public com.google.protobuf.ByteString
-          getDstIpAddressBytes() {
-        java.lang.Object ref = dstIpAddress_;
+          getDstMacAddressBytes() {
+        java.lang.Object ref = dstMacAddress_;
         if (ref instanceof String) {
           com.google.protobuf.ByteString b = 
               com.google.protobuf.ByteString.copyFromUtf8(
                   (java.lang.String) ref);
-          dstIpAddress_ = b;
+          dstMacAddress_ = b;
           return b;
         } else {
           return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>string dst_ip_address = 2;</code>
-       * @param value The dstIpAddress to set.
+       * <code>string dst_mac_address = 2;</code>
+       * @param value The dstMacAddress to set.
        * @return This builder for chaining.
        */
-      public Builder setDstIpAddress(
+      public Builder setDstMacAddress(
           java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
   }
   
-        dstIpAddress_ = value;
+        dstMacAddress_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>string dst_ip_address = 2;</code>
+       * <code>string dst_mac_address = 2;</code>
        * @return This builder for chaining.
        */
-      public Builder clearDstIpAddress() {
+      public Builder clearDstMacAddress() {
         
-        dstIpAddress_ = getDefaultInstance().getDstIpAddress();
+        dstMacAddress_ = getDefaultInstance().getDstMacAddress();
         onChanged();
         return this;
       }
       /**
-       * <code>string dst_ip_address = 2;</code>
-       * @param value The bytes for dstIpAddress to set.
+       * <code>string dst_mac_address = 2;</code>
+       * @param value The bytes for dstMacAddress to set.
        * @return This builder for chaining.
        */
-      public Builder setDstIpAddressBytes(
+      public Builder setDstMacAddressBytes(
           com.google.protobuf.ByteString value) {
         if (value == null) {
     throw new NullPointerException();
   }
   checkByteStringIsUtf8(value);
         
-        dstIpAddress_ = value;
+        dstMacAddress_ = value;
         onChanged();
         return this;
       }
 
-      private int dscp_ ;
+      private int etherType_ ;
       /**
-       * <code>uint32 dscp = 3;</code>
-       * @return The dscp.
+       * <code>uint32 ether_type = 3;</code>
+       * @return The etherType.
        */
       @java.lang.Override
-      public int getDscp() {
-        return dscp_;
+      public int getEtherType() {
+        return etherType_;
       }
       /**
-       * <code>uint32 dscp = 3;</code>
-       * @param value The dscp to set.
+       * <code>uint32 ether_type = 3;</code>
+       * @param value The etherType to set.
        * @return This builder for chaining.
        */
-      public Builder setDscp(int value) {
+      public Builder setEtherType(int value) {
         
-        dscp_ = value;
+        etherType_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>uint32 dscp = 3;</code>
+       * <code>uint32 ether_type = 3;</code>
        * @return This builder for chaining.
        */
-      public Builder clearDscp() {
+      public Builder clearEtherType() {
         
-        dscp_ = 0;
+        etherType_ = 0;
         onChanged();
         return this;
       }
 
-      private int protocol_ ;
+      private int vlanId_ ;
       /**
-       * <code>uint32 protocol = 4;</code>
-       * @return The protocol.
+       * <code>uint32 vlan_id = 4;</code>
+       * @return The vlanId.
        */
       @java.lang.Override
-      public int getProtocol() {
-        return protocol_;
+      public int getVlanId() {
+        return vlanId_;
       }
       /**
-       * <code>uint32 protocol = 4;</code>
-       * @param value The protocol to set.
+       * <code>uint32 vlan_id = 4;</code>
+       * @param value The vlanId to set.
        * @return This builder for chaining.
        */
-      public Builder setProtocol(int value) {
+      public Builder setVlanId(int value) {
         
-        protocol_ = value;
+        vlanId_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>uint32 protocol = 4;</code>
+       * <code>uint32 vlan_id = 4;</code>
        * @return This builder for chaining.
        */
-      public Builder clearProtocol() {
+      public Builder clearVlanId() {
         
-        protocol_ = 0;
+        vlanId_ = 0;
         onChanged();
         return this;
       }
 
-      private int ttl_ ;
+      private int mplsLabel_ ;
       /**
-       * <code>uint32 ttl = 5;</code>
-       * @return The ttl.
+       * <code>uint32 mpls_label = 5;</code>
+       * @return The mplsLabel.
        */
       @java.lang.Override
-      public int getTtl() {
-        return ttl_;
+      public int getMplsLabel() {
+        return mplsLabel_;
       }
       /**
-       * <code>uint32 ttl = 5;</code>
-       * @param value The ttl to set.
+       * <code>uint32 mpls_label = 5;</code>
+       * @param value The mplsLabel to set.
        * @return This builder for chaining.
        */
-      public Builder setTtl(int value) {
+      public Builder setMplsLabel(int value) {
         
-        ttl_ = value;
+        mplsLabel_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>uint32 ttl = 5;</code>
+       * <code>uint32 mpls_label = 5;</code>
        * @return This builder for chaining.
        */
-      public Builder clearTtl() {
+      public Builder clearMplsLabel() {
         
-        ttl_ = 0;
+        mplsLabel_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int mplsTrafficClass_ ;
+      /**
+       * <code>uint32 mpls_traffic_class = 6;</code>
+       * @return The mplsTrafficClass.
+       */
+      @java.lang.Override
+      public int getMplsTrafficClass() {
+        return mplsTrafficClass_;
+      }
+      /**
+       * <code>uint32 mpls_traffic_class = 6;</code>
+       * @param value The mplsTrafficClass to set.
+       * @return This builder for chaining.
+       */
+      public Builder setMplsTrafficClass(int value) {
+        
+        mplsTrafficClass_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 mpls_traffic_class = 6;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearMplsTrafficClass() {
+        
+        mplsTrafficClass_ = 0;
         onChanged();
         return this;
       }
@@ -39143,94 +39211,114 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L3)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L2)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L3)
-    private static final context.ContextOuterClass.ConnectionSettings_L3 DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L2)
+    private static final context.ContextOuterClass.ConnectionSettings_L2 DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L3();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L2();
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionSettings_L3>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L3>() {
+    private static final com.google.protobuf.Parser<ConnectionSettings_L2>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L2>() {
       @java.lang.Override
-      public ConnectionSettings_L3 parsePartialFrom(
+      public ConnectionSettings_L2 parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionSettings_L3(input, extensionRegistry);
+        return new ConnectionSettings_L2(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionSettings_L3> parser() {
+    public static com.google.protobuf.Parser<ConnectionSettings_L2> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionSettings_L3> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionSettings_L2> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionSettings_L4OrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L4)
+  public interface ConnectionSettings_L3OrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L3)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>uint32 src_port = 1;</code>
-     * @return The srcPort.
+     * <code>string src_ip_address = 1;</code>
+     * @return The srcIpAddress.
      */
-    int getSrcPort();
+    java.lang.String getSrcIpAddress();
+    /**
+     * <code>string src_ip_address = 1;</code>
+     * @return The bytes for srcIpAddress.
+     */
+    com.google.protobuf.ByteString
+        getSrcIpAddressBytes();
 
     /**
-     * <code>uint32 dst_port = 2;</code>
-     * @return The dstPort.
+     * <code>string dst_ip_address = 2;</code>
+     * @return The dstIpAddress.
      */
-    int getDstPort();
+    java.lang.String getDstIpAddress();
+    /**
+     * <code>string dst_ip_address = 2;</code>
+     * @return The bytes for dstIpAddress.
+     */
+    com.google.protobuf.ByteString
+        getDstIpAddressBytes();
 
     /**
-     * <code>uint32 tcp_flags = 3;</code>
-     * @return The tcpFlags.
+     * <code>uint32 dscp = 3;</code>
+     * @return The dscp.
      */
-    int getTcpFlags();
+    int getDscp();
 
     /**
-     * <code>uint32 ttl = 4;</code>
+     * <code>uint32 protocol = 4;</code>
+     * @return The protocol.
+     */
+    int getProtocol();
+
+    /**
+     * <code>uint32 ttl = 5;</code>
      * @return The ttl.
      */
     int getTtl();
   }
   /**
-   * Protobuf type {@code context.ConnectionSettings_L4}
+   * Protobuf type {@code context.ConnectionSettings_L3}
    */
-  public static final class ConnectionSettings_L4 extends
+  public static final class ConnectionSettings_L3 extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L4)
-      ConnectionSettings_L4OrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L3)
+      ConnectionSettings_L3OrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionSettings_L4.newBuilder() to construct.
-    private ConnectionSettings_L4(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings_L3.newBuilder() to construct.
+    private ConnectionSettings_L3(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionSettings_L4() {
+    private ConnectionSettings_L3() {
+      srcIpAddress_ = "";
+      dstIpAddress_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionSettings_L4();
+      return new ConnectionSettings_L3();
     }
 
     @java.lang.Override
@@ -39238,7 +39326,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionSettings_L4(
+    private ConnectionSettings_L3(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -39256,23 +39344,30 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 8: {
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
 
-              srcPort_ = input.readUInt32();
+              srcIpAddress_ = s;
               break;
             }
-            case 16: {
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
 
-              dstPort_ = input.readUInt32();
+              dstIpAddress_ = s;
               break;
             }
             case 24: {
 
-              tcpFlags_ = input.readUInt32();
+              dscp_ = input.readUInt32();
               break;
             }
             case 32: {
 
+              protocol_ = input.readUInt32();
+              break;
+            }
+            case 40: {
+
               ttl_ = input.readUInt32();
               break;
             }
@@ -39297,64 +39392,129 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionSettings_L4.class, context.ContextOuterClass.ConnectionSettings_L4.Builder.class);
+              context.ContextOuterClass.ConnectionSettings_L3.class, context.ContextOuterClass.ConnectionSettings_L3.Builder.class);
     }
 
-    public static final int SRC_PORT_FIELD_NUMBER = 1;
-    private int srcPort_;
+    public static final int SRC_IP_ADDRESS_FIELD_NUMBER = 1;
+    private volatile java.lang.Object srcIpAddress_;
     /**
-     * <code>uint32 src_port = 1;</code>
-     * @return The srcPort.
+     * <code>string src_ip_address = 1;</code>
+     * @return The srcIpAddress.
      */
     @java.lang.Override
-    public int getSrcPort() {
-      return srcPort_;
+    public java.lang.String getSrcIpAddress() {
+      java.lang.Object ref = srcIpAddress_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        srcIpAddress_ = s;
+        return s;
+      }
     }
-
-    public static final int DST_PORT_FIELD_NUMBER = 2;
-    private int dstPort_;
     /**
-     * <code>uint32 dst_port = 2;</code>
-     * @return The dstPort.
+     * <code>string src_ip_address = 1;</code>
+     * @return The bytes for srcIpAddress.
      */
     @java.lang.Override
-    public int getDstPort() {
-      return dstPort_;
+    public com.google.protobuf.ByteString
+        getSrcIpAddressBytes() {
+      java.lang.Object ref = srcIpAddress_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        srcIpAddress_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
-    public static final int TCP_FLAGS_FIELD_NUMBER = 3;
-    private int tcpFlags_;
+    public static final int DST_IP_ADDRESS_FIELD_NUMBER = 2;
+    private volatile java.lang.Object dstIpAddress_;
     /**
-     * <code>uint32 tcp_flags = 3;</code>
-     * @return The tcpFlags.
+     * <code>string dst_ip_address = 2;</code>
+     * @return The dstIpAddress.
      */
     @java.lang.Override
-    public int getTcpFlags() {
-      return tcpFlags_;
+    public java.lang.String getDstIpAddress() {
+      java.lang.Object ref = dstIpAddress_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        dstIpAddress_ = s;
+        return s;
+      }
     }
-
-    public static final int TTL_FIELD_NUMBER = 4;
-    private int ttl_;
     /**
-     * <code>uint32 ttl = 4;</code>
-     * @return The ttl.
+     * <code>string dst_ip_address = 2;</code>
+     * @return The bytes for dstIpAddress.
      */
     @java.lang.Override
-    public int getTtl() {
-      return ttl_;
+    public com.google.protobuf.ByteString
+        getDstIpAddressBytes() {
+      java.lang.Object ref = dstIpAddress_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        dstIpAddress_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
+    public static final int DSCP_FIELD_NUMBER = 3;
+    private int dscp_;
+    /**
+     * <code>uint32 dscp = 3;</code>
+     * @return The dscp.
+     */
+    @java.lang.Override
+    public int getDscp() {
+      return dscp_;
+    }
+
+    public static final int PROTOCOL_FIELD_NUMBER = 4;
+    private int protocol_;
+    /**
+     * <code>uint32 protocol = 4;</code>
+     * @return The protocol.
+     */
+    @java.lang.Override
+    public int getProtocol() {
+      return protocol_;
+    }
+
+    public static final int TTL_FIELD_NUMBER = 5;
+    private int ttl_;
+    /**
+     * <code>uint32 ttl = 5;</code>
+     * @return The ttl.
+     */
+    @java.lang.Override
+    public int getTtl() {
+      return ttl_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
       byte isInitialized = memoizedIsInitialized;
       if (isInitialized == 1) return true;
       if (isInitialized == 0) return false;
@@ -39366,17 +39526,20 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (srcPort_ != 0) {
-        output.writeUInt32(1, srcPort_);
+      if (!getSrcIpAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, srcIpAddress_);
       }
-      if (dstPort_ != 0) {
-        output.writeUInt32(2, dstPort_);
+      if (!getDstIpAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, dstIpAddress_);
       }
-      if (tcpFlags_ != 0) {
-        output.writeUInt32(3, tcpFlags_);
+      if (dscp_ != 0) {
+        output.writeUInt32(3, dscp_);
+      }
+      if (protocol_ != 0) {
+        output.writeUInt32(4, protocol_);
       }
       if (ttl_ != 0) {
-        output.writeUInt32(4, ttl_);
+        output.writeUInt32(5, ttl_);
       }
       unknownFields.writeTo(output);
     }
@@ -39387,21 +39550,23 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (srcPort_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(1, srcPort_);
+      if (!getSrcIpAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, srcIpAddress_);
       }
-      if (dstPort_ != 0) {
+      if (!getDstIpAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, dstIpAddress_);
+      }
+      if (dscp_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(2, dstPort_);
+          .computeUInt32Size(3, dscp_);
       }
-      if (tcpFlags_ != 0) {
+      if (protocol_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(3, tcpFlags_);
+          .computeUInt32Size(4, protocol_);
       }
       if (ttl_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(4, ttl_);
+          .computeUInt32Size(5, ttl_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -39413,17 +39578,19 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L4)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L3)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionSettings_L4 other = (context.ContextOuterClass.ConnectionSettings_L4) obj;
+      context.ContextOuterClass.ConnectionSettings_L3 other = (context.ContextOuterClass.ConnectionSettings_L3) obj;
 
-      if (getSrcPort()
-          != other.getSrcPort()) return false;
-      if (getDstPort()
-          != other.getDstPort()) return false;
-      if (getTcpFlags()
-          != other.getTcpFlags()) return false;
+      if (!getSrcIpAddress()
+          .equals(other.getSrcIpAddress())) return false;
+      if (!getDstIpAddress()
+          .equals(other.getDstIpAddress())) return false;
+      if (getDscp()
+          != other.getDscp()) return false;
+      if (getProtocol()
+          != other.getProtocol()) return false;
       if (getTtl()
           != other.getTtl()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
@@ -39437,12 +39604,14 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + SRC_PORT_FIELD_NUMBER;
-      hash = (53 * hash) + getSrcPort();
-      hash = (37 * hash) + DST_PORT_FIELD_NUMBER;
-      hash = (53 * hash) + getDstPort();
-      hash = (37 * hash) + TCP_FLAGS_FIELD_NUMBER;
-      hash = (53 * hash) + getTcpFlags();
+      hash = (37 * hash) + SRC_IP_ADDRESS_FIELD_NUMBER;
+      hash = (53 * hash) + getSrcIpAddress().hashCode();
+      hash = (37 * hash) + DST_IP_ADDRESS_FIELD_NUMBER;
+      hash = (53 * hash) + getDstIpAddress().hashCode();
+      hash = (37 * hash) + DSCP_FIELD_NUMBER;
+      hash = (53 * hash) + getDscp();
+      hash = (37 * hash) + PROTOCOL_FIELD_NUMBER;
+      hash = (53 * hash) + getProtocol();
       hash = (37 * hash) + TTL_FIELD_NUMBER;
       hash = (53 * hash) + getTtl();
       hash = (29 * hash) + unknownFields.hashCode();
@@ -39450,69 +39619,69 @@ public final class ContextOuterClass {
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -39525,7 +39694,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L4 prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L3 prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -39541,26 +39710,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionSettings_L4}
+     * Protobuf type {@code context.ConnectionSettings_L3}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L4)
-        context.ContextOuterClass.ConnectionSettings_L4OrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L3)
+        context.ContextOuterClass.ConnectionSettings_L3OrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionSettings_L4.class, context.ContextOuterClass.ConnectionSettings_L4.Builder.class);
+                context.ContextOuterClass.ConnectionSettings_L3.class, context.ContextOuterClass.ConnectionSettings_L3.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionSettings_L4.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings_L3.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -39578,11 +39747,13 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        srcPort_ = 0;
+        srcIpAddress_ = "";
 
-        dstPort_ = 0;
+        dstIpAddress_ = "";
 
-        tcpFlags_ = 0;
+        dscp_ = 0;
+
+        protocol_ = 0;
 
         ttl_ = 0;
 
@@ -39592,17 +39763,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L4 build() {
-        context.ContextOuterClass.ConnectionSettings_L4 result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings_L3 build() {
+        context.ContextOuterClass.ConnectionSettings_L3 result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -39610,11 +39781,12 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L4 buildPartial() {
-        context.ContextOuterClass.ConnectionSettings_L4 result = new context.ContextOuterClass.ConnectionSettings_L4(this);
-        result.srcPort_ = srcPort_;
-        result.dstPort_ = dstPort_;
-        result.tcpFlags_ = tcpFlags_;
+      public context.ContextOuterClass.ConnectionSettings_L3 buildPartial() {
+        context.ContextOuterClass.ConnectionSettings_L3 result = new context.ContextOuterClass.ConnectionSettings_L3(this);
+        result.srcIpAddress_ = srcIpAddress_;
+        result.dstIpAddress_ = dstIpAddress_;
+        result.dscp_ = dscp_;
+        result.protocol_ = protocol_;
         result.ttl_ = ttl_;
         onBuilt();
         return result;
@@ -39654,24 +39826,29 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionSettings_L4) {
-          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L4)other);
+        if (other instanceof context.ContextOuterClass.ConnectionSettings_L3) {
+          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L3)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L4 other) {
-        if (other == context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance()) return this;
-        if (other.getSrcPort() != 0) {
-          setSrcPort(other.getSrcPort());
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L3 other) {
+        if (other == context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance()) return this;
+        if (!other.getSrcIpAddress().isEmpty()) {
+          srcIpAddress_ = other.srcIpAddress_;
+          onChanged();
         }
-        if (other.getDstPort() != 0) {
-          setDstPort(other.getDstPort());
+        if (!other.getDstIpAddress().isEmpty()) {
+          dstIpAddress_ = other.dstIpAddress_;
+          onChanged();
         }
-        if (other.getTcpFlags() != 0) {
-          setTcpFlags(other.getTcpFlags());
+        if (other.getDscp() != 0) {
+          setDscp(other.getDscp());
+        }
+        if (other.getProtocol() != 0) {
+          setProtocol(other.getProtocol());
         }
         if (other.getTtl() != 0) {
           setTtl(other.getTtl());
@@ -39691,11 +39868,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionSettings_L4 parsedMessage = null;
+        context.ContextOuterClass.ConnectionSettings_L3 parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L4) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L3) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -39705,102 +39882,223 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private int srcPort_ ;
+      private java.lang.Object srcIpAddress_ = "";
       /**
-       * <code>uint32 src_port = 1;</code>
-       * @return The srcPort.
+       * <code>string src_ip_address = 1;</code>
+       * @return The srcIpAddress.
        */
-      @java.lang.Override
-      public int getSrcPort() {
-        return srcPort_;
+      public java.lang.String getSrcIpAddress() {
+        java.lang.Object ref = srcIpAddress_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          srcIpAddress_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
       }
       /**
-       * <code>uint32 src_port = 1;</code>
-       * @param value The srcPort to set.
+       * <code>string src_ip_address = 1;</code>
+       * @return The bytes for srcIpAddress.
+       */
+      public com.google.protobuf.ByteString
+          getSrcIpAddressBytes() {
+        java.lang.Object ref = srcIpAddress_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          srcIpAddress_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string src_ip_address = 1;</code>
+       * @param value The srcIpAddress to set.
        * @return This builder for chaining.
        */
-      public Builder setSrcPort(int value) {
-        
-        srcPort_ = value;
+      public Builder setSrcIpAddress(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        srcIpAddress_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>uint32 src_port = 1;</code>
+       * <code>string src_ip_address = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder clearSrcPort() {
+      public Builder clearSrcIpAddress() {
         
-        srcPort_ = 0;
+        srcIpAddress_ = getDefaultInstance().getSrcIpAddress();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string src_ip_address = 1;</code>
+       * @param value The bytes for srcIpAddress to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSrcIpAddressBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        srcIpAddress_ = value;
         onChanged();
         return this;
       }
 
-      private int dstPort_ ;
+      private java.lang.Object dstIpAddress_ = "";
       /**
-       * <code>uint32 dst_port = 2;</code>
-       * @return The dstPort.
+       * <code>string dst_ip_address = 2;</code>
+       * @return The dstIpAddress.
+       */
+      public java.lang.String getDstIpAddress() {
+        java.lang.Object ref = dstIpAddress_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          dstIpAddress_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string dst_ip_address = 2;</code>
+       * @return The bytes for dstIpAddress.
+       */
+      public com.google.protobuf.ByteString
+          getDstIpAddressBytes() {
+        java.lang.Object ref = dstIpAddress_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          dstIpAddress_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string dst_ip_address = 2;</code>
+       * @param value The dstIpAddress to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDstIpAddress(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        dstIpAddress_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string dst_ip_address = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDstIpAddress() {
+        
+        dstIpAddress_ = getDefaultInstance().getDstIpAddress();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string dst_ip_address = 2;</code>
+       * @param value The bytes for dstIpAddress to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDstIpAddressBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        dstIpAddress_ = value;
+        onChanged();
+        return this;
+      }
+
+      private int dscp_ ;
+      /**
+       * <code>uint32 dscp = 3;</code>
+       * @return The dscp.
        */
       @java.lang.Override
-      public int getDstPort() {
-        return dstPort_;
+      public int getDscp() {
+        return dscp_;
       }
       /**
-       * <code>uint32 dst_port = 2;</code>
-       * @param value The dstPort to set.
+       * <code>uint32 dscp = 3;</code>
+       * @param value The dscp to set.
        * @return This builder for chaining.
        */
-      public Builder setDstPort(int value) {
+      public Builder setDscp(int value) {
         
-        dstPort_ = value;
+        dscp_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>uint32 dst_port = 2;</code>
+       * <code>uint32 dscp = 3;</code>
        * @return This builder for chaining.
        */
-      public Builder clearDstPort() {
+      public Builder clearDscp() {
         
-        dstPort_ = 0;
+        dscp_ = 0;
         onChanged();
         return this;
       }
 
-      private int tcpFlags_ ;
+      private int protocol_ ;
       /**
-       * <code>uint32 tcp_flags = 3;</code>
-       * @return The tcpFlags.
+       * <code>uint32 protocol = 4;</code>
+       * @return The protocol.
        */
       @java.lang.Override
-      public int getTcpFlags() {
-        return tcpFlags_;
+      public int getProtocol() {
+        return protocol_;
       }
       /**
-       * <code>uint32 tcp_flags = 3;</code>
-       * @param value The tcpFlags to set.
+       * <code>uint32 protocol = 4;</code>
+       * @param value The protocol to set.
        * @return This builder for chaining.
        */
-      public Builder setTcpFlags(int value) {
+      public Builder setProtocol(int value) {
         
-        tcpFlags_ = value;
+        protocol_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>uint32 tcp_flags = 3;</code>
+       * <code>uint32 protocol = 4;</code>
        * @return This builder for chaining.
        */
-      public Builder clearTcpFlags() {
+      public Builder clearProtocol() {
         
-        tcpFlags_ = 0;
+        protocol_ = 0;
         onChanged();
         return this;
       }
 
       private int ttl_ ;
       /**
-       * <code>uint32 ttl = 4;</code>
+       * <code>uint32 ttl = 5;</code>
        * @return The ttl.
        */
       @java.lang.Override
@@ -39808,7 +40106,7 @@ public final class ContextOuterClass {
         return ttl_;
       }
       /**
-       * <code>uint32 ttl = 4;</code>
+       * <code>uint32 ttl = 5;</code>
        * @param value The ttl to set.
        * @return This builder for chaining.
        */
@@ -39819,7 +40117,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>uint32 ttl = 4;</code>
+       * <code>uint32 ttl = 5;</code>
        * @return This builder for chaining.
        */
       public Builder clearTtl() {
@@ -39841,130 +40139,94 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L4)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L3)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L4)
-    private static final context.ContextOuterClass.ConnectionSettings_L4 DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L3)
+    private static final context.ContextOuterClass.ConnectionSettings_L3 DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L4();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L3();
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionSettings_L4>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L4>() {
+    private static final com.google.protobuf.Parser<ConnectionSettings_L3>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L3>() {
       @java.lang.Override
-      public ConnectionSettings_L4 parsePartialFrom(
+      public ConnectionSettings_L3 parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionSettings_L4(input, extensionRegistry);
+        return new ConnectionSettings_L3(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionSettings_L4> parser() {
+    public static com.google.protobuf.Parser<ConnectionSettings_L3> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionSettings_L4> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionSettings_L3> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionSettingsOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings)
+  public interface ConnectionSettings_L4OrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L4)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-     * @return Whether the l0 field is set.
-     */
-    boolean hasL0();
-    /**
-     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-     * @return The l0.
-     */
-    context.ContextOuterClass.ConnectionSettings_L0 getL0();
-    /**
-     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * <code>uint32 src_port = 1;</code>
+     * @return The srcPort.
      */
-    context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder();
+    int getSrcPort();
 
     /**
-     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-     * @return Whether the l2 field is set.
-     */
-    boolean hasL2();
-    /**
-     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-     * @return The l2.
-     */
-    context.ContextOuterClass.ConnectionSettings_L2 getL2();
-    /**
-     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+     * <code>uint32 dst_port = 2;</code>
+     * @return The dstPort.
      */
-    context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder();
+    int getDstPort();
 
     /**
-     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-     * @return Whether the l3 field is set.
-     */
-    boolean hasL3();
-    /**
-     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-     * @return The l3.
-     */
-    context.ContextOuterClass.ConnectionSettings_L3 getL3();
-    /**
-     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     * <code>uint32 tcp_flags = 3;</code>
+     * @return The tcpFlags.
      */
-    context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder();
+    int getTcpFlags();
 
     /**
-     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-     * @return Whether the l4 field is set.
-     */
-    boolean hasL4();
-    /**
-     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-     * @return The l4.
-     */
-    context.ContextOuterClass.ConnectionSettings_L4 getL4();
-    /**
-     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     * <code>uint32 ttl = 4;</code>
+     * @return The ttl.
      */
-    context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder();
+    int getTtl();
   }
   /**
-   * Protobuf type {@code context.ConnectionSettings}
+   * Protobuf type {@code context.ConnectionSettings_L4}
    */
-  public static final class ConnectionSettings extends
+  public static final class ConnectionSettings_L4 extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionSettings)
-      ConnectionSettingsOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L4)
+      ConnectionSettings_L4OrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionSettings.newBuilder() to construct.
-    private ConnectionSettings(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings_L4.newBuilder() to construct.
+    private ConnectionSettings_L4(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionSettings() {
+    private ConnectionSettings_L4() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionSettings();
+      return new ConnectionSettings_L4();
     }
 
     @java.lang.Override
@@ -39972,7 +40234,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionSettings(
+    private ConnectionSettings_L4(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -39990,56 +40252,24 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 10: {
-              context.ContextOuterClass.ConnectionSettings_L0.Builder subBuilder = null;
-              if (l0_ != null) {
-                subBuilder = l0_.toBuilder();
-              }
-              l0_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L0.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(l0_);
-                l0_ = subBuilder.buildPartial();
-              }
+            case 8: {
 
+              srcPort_ = input.readUInt32();
               break;
             }
-            case 18: {
-              context.ContextOuterClass.ConnectionSettings_L2.Builder subBuilder = null;
-              if (l2_ != null) {
-                subBuilder = l2_.toBuilder();
-              }
-              l2_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L2.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(l2_);
-                l2_ = subBuilder.buildPartial();
-              }
+            case 16: {
 
+              dstPort_ = input.readUInt32();
               break;
             }
-            case 26: {
-              context.ContextOuterClass.ConnectionSettings_L3.Builder subBuilder = null;
-              if (l3_ != null) {
-                subBuilder = l3_.toBuilder();
-              }
-              l3_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L3.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(l3_);
-                l3_ = subBuilder.buildPartial();
-              }
+            case 24: {
 
+              tcpFlags_ = input.readUInt32();
               break;
             }
-            case 34: {
-              context.ContextOuterClass.ConnectionSettings_L4.Builder subBuilder = null;
-              if (l4_ != null) {
-                subBuilder = l4_.toBuilder();
-              }
-              l4_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L4.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(l4_);
-                l4_ = subBuilder.buildPartial();
-              }
+            case 32: {
 
+              ttl_ = input.readUInt32();
               break;
             }
             default: {
@@ -40063,119 +40293,59 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionSettings.class, context.ContextOuterClass.ConnectionSettings.Builder.class);
+              context.ContextOuterClass.ConnectionSettings_L4.class, context.ContextOuterClass.ConnectionSettings_L4.Builder.class);
     }
 
-    public static final int L0_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.ConnectionSettings_L0 l0_;
-    /**
-     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-     * @return Whether the l0 field is set.
-     */
-    @java.lang.Override
-    public boolean hasL0() {
-      return l0_ != null;
-    }
-    /**
-     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-     * @return The l0.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L0 getL0() {
-      return l0_ == null ? context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
-    }
+    public static final int SRC_PORT_FIELD_NUMBER = 1;
+    private int srcPort_;
     /**
-     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * <code>uint32 src_port = 1;</code>
+     * @return The srcPort.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder() {
-      return getL0();
+    public int getSrcPort() {
+      return srcPort_;
     }
 
-    public static final int L2_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.ConnectionSettings_L2 l2_;
-    /**
-     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-     * @return Whether the l2 field is set.
-     */
-    @java.lang.Override
-    public boolean hasL2() {
-      return l2_ != null;
-    }
-    /**
-     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-     * @return The l2.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L2 getL2() {
-      return l2_ == null ? context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
-    }
+    public static final int DST_PORT_FIELD_NUMBER = 2;
+    private int dstPort_;
     /**
-     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+     * <code>uint32 dst_port = 2;</code>
+     * @return The dstPort.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder() {
-      return getL2();
+    public int getDstPort() {
+      return dstPort_;
     }
 
-    public static final int L3_FIELD_NUMBER = 3;
-    private context.ContextOuterClass.ConnectionSettings_L3 l3_;
-    /**
-     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-     * @return Whether the l3 field is set.
-     */
-    @java.lang.Override
-    public boolean hasL3() {
-      return l3_ != null;
-    }
-    /**
-     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-     * @return The l3.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L3 getL3() {
-      return l3_ == null ? context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
-    }
+    public static final int TCP_FLAGS_FIELD_NUMBER = 3;
+    private int tcpFlags_;
     /**
-     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     * <code>uint32 tcp_flags = 3;</code>
+     * @return The tcpFlags.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder() {
-      return getL3();
+    public int getTcpFlags() {
+      return tcpFlags_;
     }
 
-    public static final int L4_FIELD_NUMBER = 4;
-    private context.ContextOuterClass.ConnectionSettings_L4 l4_;
-    /**
-     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-     * @return Whether the l4 field is set.
-     */
-    @java.lang.Override
-    public boolean hasL4() {
-      return l4_ != null;
-    }
-    /**
-     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-     * @return The l4.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L4 getL4() {
-      return l4_ == null ? context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
-    }
+    public static final int TTL_FIELD_NUMBER = 4;
+    private int ttl_;
     /**
-     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     * <code>uint32 ttl = 4;</code>
+     * @return The ttl.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder() {
-      return getL4();
+    public int getTtl() {
+      return ttl_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -40192,17 +40362,17 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (l0_ != null) {
-        output.writeMessage(1, getL0());
+      if (srcPort_ != 0) {
+        output.writeUInt32(1, srcPort_);
       }
-      if (l2_ != null) {
-        output.writeMessage(2, getL2());
+      if (dstPort_ != 0) {
+        output.writeUInt32(2, dstPort_);
       }
-      if (l3_ != null) {
-        output.writeMessage(3, getL3());
+      if (tcpFlags_ != 0) {
+        output.writeUInt32(3, tcpFlags_);
       }
-      if (l4_ != null) {
-        output.writeMessage(4, getL4());
+      if (ttl_ != 0) {
+        output.writeUInt32(4, ttl_);
       }
       unknownFields.writeTo(output);
     }
@@ -40213,21 +40383,21 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (l0_ != null) {
+      if (srcPort_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getL0());
+          .computeUInt32Size(1, srcPort_);
       }
-      if (l2_ != null) {
+      if (dstPort_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getL2());
+          .computeUInt32Size(2, dstPort_);
       }
-      if (l3_ != null) {
+      if (tcpFlags_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, getL3());
+          .computeUInt32Size(3, tcpFlags_);
       }
-      if (l4_ != null) {
+      if (ttl_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, getL4());
+          .computeUInt32Size(4, ttl_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -40239,31 +40409,19 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L4)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionSettings other = (context.ContextOuterClass.ConnectionSettings) obj;
+      context.ContextOuterClass.ConnectionSettings_L4 other = (context.ContextOuterClass.ConnectionSettings_L4) obj;
 
-      if (hasL0() != other.hasL0()) return false;
-      if (hasL0()) {
-        if (!getL0()
-            .equals(other.getL0())) return false;
-      }
-      if (hasL2() != other.hasL2()) return false;
-      if (hasL2()) {
-        if (!getL2()
-            .equals(other.getL2())) return false;
-      }
-      if (hasL3() != other.hasL3()) return false;
-      if (hasL3()) {
-        if (!getL3()
-            .equals(other.getL3())) return false;
-      }
-      if (hasL4() != other.hasL4()) return false;
-      if (hasL4()) {
-        if (!getL4()
-            .equals(other.getL4())) return false;
-      }
+      if (getSrcPort()
+          != other.getSrcPort()) return false;
+      if (getDstPort()
+          != other.getDstPort()) return false;
+      if (getTcpFlags()
+          != other.getTcpFlags()) return false;
+      if (getTtl()
+          != other.getTtl()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -40275,90 +40433,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasL0()) {
-        hash = (37 * hash) + L0_FIELD_NUMBER;
-        hash = (53 * hash) + getL0().hashCode();
-      }
-      if (hasL2()) {
-        hash = (37 * hash) + L2_FIELD_NUMBER;
-        hash = (53 * hash) + getL2().hashCode();
-      }
-      if (hasL3()) {
-        hash = (37 * hash) + L3_FIELD_NUMBER;
-        hash = (53 * hash) + getL3().hashCode();
-      }
-      if (hasL4()) {
-        hash = (37 * hash) + L4_FIELD_NUMBER;
-        hash = (53 * hash) + getL4().hashCode();
-      }
+      hash = (37 * hash) + SRC_PORT_FIELD_NUMBER;
+      hash = (53 * hash) + getSrcPort();
+      hash = (37 * hash) + DST_PORT_FIELD_NUMBER;
+      hash = (53 * hash) + getDstPort();
+      hash = (37 * hash) + TCP_FLAGS_FIELD_NUMBER;
+      hash = (53 * hash) + getTcpFlags();
+      hash = (37 * hash) + TTL_FIELD_NUMBER;
+      hash = (53 * hash) + getTtl();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -40371,7 +40521,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L4 prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -40387,26 +40537,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionSettings}
+     * Protobuf type {@code context.ConnectionSettings_L4}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings)
-        context.ContextOuterClass.ConnectionSettingsOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L4)
+        context.ContextOuterClass.ConnectionSettings_L4OrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionSettings.class, context.ContextOuterClass.ConnectionSettings.Builder.class);
+                context.ContextOuterClass.ConnectionSettings_L4.class, context.ContextOuterClass.ConnectionSettings_L4.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionSettings.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings_L4.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -40424,47 +40574,31 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (l0Builder_ == null) {
-          l0_ = null;
-        } else {
-          l0_ = null;
-          l0Builder_ = null;
-        }
-        if (l2Builder_ == null) {
-          l2_ = null;
-        } else {
-          l2_ = null;
-          l2Builder_ = null;
-        }
-        if (l3Builder_ == null) {
-          l3_ = null;
-        } else {
-          l3_ = null;
-          l3Builder_ = null;
-        }
-        if (l4Builder_ == null) {
-          l4_ = null;
-        } else {
-          l4_ = null;
-          l4Builder_ = null;
-        }
+        srcPort_ = 0;
+
+        dstPort_ = 0;
+
+        tcpFlags_ = 0;
+
+        ttl_ = 0;
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionSettings.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings build() {
-        context.ContextOuterClass.ConnectionSettings result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings_L4 build() {
+        context.ContextOuterClass.ConnectionSettings_L4 result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -40472,28 +40606,12 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings buildPartial() {
-        context.ContextOuterClass.ConnectionSettings result = new context.ContextOuterClass.ConnectionSettings(this);
-        if (l0Builder_ == null) {
-          result.l0_ = l0_;
-        } else {
-          result.l0_ = l0Builder_.build();
-        }
-        if (l2Builder_ == null) {
-          result.l2_ = l2_;
-        } else {
-          result.l2_ = l2Builder_.build();
-        }
-        if (l3Builder_ == null) {
-          result.l3_ = l3_;
-        } else {
-          result.l3_ = l3Builder_.build();
-        }
-        if (l4Builder_ == null) {
-          result.l4_ = l4_;
-        } else {
-          result.l4_ = l4Builder_.build();
-        }
+      public context.ContextOuterClass.ConnectionSettings_L4 buildPartial() {
+        context.ContextOuterClass.ConnectionSettings_L4 result = new context.ContextOuterClass.ConnectionSettings_L4(this);
+        result.srcPort_ = srcPort_;
+        result.dstPort_ = dstPort_;
+        result.tcpFlags_ = tcpFlags_;
+        result.ttl_ = ttl_;
         onBuilt();
         return result;
       }
@@ -40532,27 +40650,27 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionSettings) {
-          return mergeFrom((context.ContextOuterClass.ConnectionSettings)other);
+        if (other instanceof context.ContextOuterClass.ConnectionSettings_L4) {
+          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L4)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings other) {
-        if (other == context.ContextOuterClass.ConnectionSettings.getDefaultInstance()) return this;
-        if (other.hasL0()) {
-          mergeL0(other.getL0());
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L4 other) {
+        if (other == context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance()) return this;
+        if (other.getSrcPort() != 0) {
+          setSrcPort(other.getSrcPort());
         }
-        if (other.hasL2()) {
-          mergeL2(other.getL2());
+        if (other.getDstPort() != 0) {
+          setDstPort(other.getDstPort());
         }
-        if (other.hasL3()) {
-          mergeL3(other.getL3());
+        if (other.getTcpFlags() != 0) {
+          setTcpFlags(other.getTcpFlags());
         }
-        if (other.hasL4()) {
-          mergeL4(other.getL4());
+        if (other.getTtl() != 0) {
+          setTtl(other.getTtl());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -40569,11 +40687,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionSettings parsedMessage = null;
+        context.ContextOuterClass.ConnectionSettings_L4 parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionSettings) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L4) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -40583,653 +40701,266 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private context.ContextOuterClass.ConnectionSettings_L0 l0_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder> l0Builder_;
-      /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-       * @return Whether the l0 field is set.
-       */
-      public boolean hasL0() {
-        return l0Builder_ != null || l0_ != null;
-      }
+      private int srcPort_ ;
       /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-       * @return The l0.
+       * <code>uint32 src_port = 1;</code>
+       * @return The srcPort.
        */
-      public context.ContextOuterClass.ConnectionSettings_L0 getL0() {
-        if (l0Builder_ == null) {
-          return l0_ == null ? context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
-        } else {
-          return l0Builder_.getMessage();
-        }
+      @java.lang.Override
+      public int getSrcPort() {
+        return srcPort_;
       }
       /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * <code>uint32 src_port = 1;</code>
+       * @param value The srcPort to set.
+       * @return This builder for chaining.
        */
-      public Builder setL0(context.ContextOuterClass.ConnectionSettings_L0 value) {
-        if (l0Builder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          l0_ = value;
-          onChanged();
-        } else {
-          l0Builder_.setMessage(value);
-        }
-
+      public Builder setSrcPort(int value) {
+        
+        srcPort_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * <code>uint32 src_port = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder setL0(
-          context.ContextOuterClass.ConnectionSettings_L0.Builder builderForValue) {
-        if (l0Builder_ == null) {
-          l0_ = builderForValue.build();
-          onChanged();
-        } else {
-          l0Builder_.setMessage(builderForValue.build());
-        }
-
+      public Builder clearSrcPort() {
+        
+        srcPort_ = 0;
+        onChanged();
         return this;
       }
+
+      private int dstPort_ ;
       /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * <code>uint32 dst_port = 2;</code>
+       * @return The dstPort.
        */
-      public Builder mergeL0(context.ContextOuterClass.ConnectionSettings_L0 value) {
-        if (l0Builder_ == null) {
-          if (l0_ != null) {
-            l0_ =
-              context.ContextOuterClass.ConnectionSettings_L0.newBuilder(l0_).mergeFrom(value).buildPartial();
-          } else {
-            l0_ = value;
-          }
-          onChanged();
-        } else {
-          l0Builder_.mergeFrom(value);
-        }
-
-        return this;
+      @java.lang.Override
+      public int getDstPort() {
+        return dstPort_;
       }
       /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * <code>uint32 dst_port = 2;</code>
+       * @param value The dstPort to set.
+       * @return This builder for chaining.
        */
-      public Builder clearL0() {
-        if (l0Builder_ == null) {
-          l0_ = null;
-          onChanged();
-        } else {
-          l0_ = null;
-          l0Builder_ = null;
-        }
-
+      public Builder setDstPort(int value) {
+        
+        dstPort_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * <code>uint32 dst_port = 2;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ConnectionSettings_L0.Builder getL0Builder() {
+      public Builder clearDstPort() {
         
+        dstPort_ = 0;
         onChanged();
-        return getL0FieldBuilder().getBuilder();
+        return this;
       }
+
+      private int tcpFlags_ ;
       /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * <code>uint32 tcp_flags = 3;</code>
+       * @return The tcpFlags.
        */
-      public context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder() {
-        if (l0Builder_ != null) {
-          return l0Builder_.getMessageOrBuilder();
-        } else {
-          return l0_ == null ?
-              context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
-        }
+      @java.lang.Override
+      public int getTcpFlags() {
+        return tcpFlags_;
       }
       /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * <code>uint32 tcp_flags = 3;</code>
+       * @param value The tcpFlags to set.
+       * @return This builder for chaining.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder> 
-          getL0FieldBuilder() {
-        if (l0Builder_ == null) {
-          l0Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder>(
-                  getL0(),
-                  getParentForChildren(),
-                  isClean());
-          l0_ = null;
-        }
-        return l0Builder_;
-      }
-
-      private context.ContextOuterClass.ConnectionSettings_L2 l2_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L2, context.ContextOuterClass.ConnectionSettings_L2.Builder, context.ContextOuterClass.ConnectionSettings_L2OrBuilder> l2Builder_;
-      /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-       * @return Whether the l2 field is set.
-       */
-      public boolean hasL2() {
-        return l2Builder_ != null || l2_ != null;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-       * @return The l2.
-       */
-      public context.ContextOuterClass.ConnectionSettings_L2 getL2() {
-        if (l2Builder_ == null) {
-          return l2_ == null ? context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
-        } else {
-          return l2Builder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-       */
-      public Builder setL2(context.ContextOuterClass.ConnectionSettings_L2 value) {
-        if (l2Builder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          l2_ = value;
-          onChanged();
-        } else {
-          l2Builder_.setMessage(value);
-        }
-
+      public Builder setTcpFlags(int value) {
+        
+        tcpFlags_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       * <code>uint32 tcp_flags = 3;</code>
+       * @return This builder for chaining.
        */
-      public Builder setL2(
-          context.ContextOuterClass.ConnectionSettings_L2.Builder builderForValue) {
-        if (l2Builder_ == null) {
-          l2_ = builderForValue.build();
-          onChanged();
-        } else {
-          l2Builder_.setMessage(builderForValue.build());
-        }
-
+      public Builder clearTcpFlags() {
+        
+        tcpFlags_ = 0;
+        onChanged();
         return this;
       }
-      /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-       */
-      public Builder mergeL2(context.ContextOuterClass.ConnectionSettings_L2 value) {
-        if (l2Builder_ == null) {
-          if (l2_ != null) {
-            l2_ =
-              context.ContextOuterClass.ConnectionSettings_L2.newBuilder(l2_).mergeFrom(value).buildPartial();
-          } else {
-            l2_ = value;
-          }
-          onChanged();
-        } else {
-          l2Builder_.mergeFrom(value);
-        }
 
-        return this;
-      }
+      private int ttl_ ;
       /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       * <code>uint32 ttl = 4;</code>
+       * @return The ttl.
        */
-      public Builder clearL2() {
-        if (l2Builder_ == null) {
-          l2_ = null;
-          onChanged();
-        } else {
-          l2_ = null;
-          l2Builder_ = null;
-        }
-
-        return this;
+      @java.lang.Override
+      public int getTtl() {
+        return ttl_;
       }
       /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       * <code>uint32 ttl = 4;</code>
+       * @param value The ttl to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ConnectionSettings_L2.Builder getL2Builder() {
+      public Builder setTtl(int value) {
         
+        ttl_ = value;
         onChanged();
-        return getL2FieldBuilder().getBuilder();
+        return this;
       }
       /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       * <code>uint32 ttl = 4;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder() {
-        if (l2Builder_ != null) {
-          return l2Builder_.getMessageOrBuilder();
-        } else {
-          return l2_ == null ?
-              context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
-        }
+      public Builder clearTtl() {
+        
+        ttl_ = 0;
+        onChanged();
+        return this;
       }
-      /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L2, context.ContextOuterClass.ConnectionSettings_L2.Builder, context.ContextOuterClass.ConnectionSettings_L2OrBuilder> 
-          getL2FieldBuilder() {
-        if (l2Builder_ == null) {
-          l2Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionSettings_L2, context.ContextOuterClass.ConnectionSettings_L2.Builder, context.ContextOuterClass.ConnectionSettings_L2OrBuilder>(
-                  getL2(),
-                  getParentForChildren(),
-                  isClean());
-          l2_ = null;
-        }
-        return l2Builder_;
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
       }
 
-      private context.ContextOuterClass.ConnectionSettings_L3 l3_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder> l3Builder_;
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       * @return Whether the l3 field is set.
-       */
-      public boolean hasL3() {
-        return l3Builder_ != null || l3_ != null;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       * @return The l3.
-       */
-      public context.ContextOuterClass.ConnectionSettings_L3 getL3() {
-        if (l3Builder_ == null) {
-          return l3_ == null ? context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
-        } else {
-          return l3Builder_.getMessage();
-        }
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
       }
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       */
-      public Builder setL3(context.ContextOuterClass.ConnectionSettings_L3 value) {
-        if (l3Builder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          l3_ = value;
-          onChanged();
-        } else {
-          l3Builder_.setMessage(value);
-        }
 
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       */
-      public Builder setL3(
-          context.ContextOuterClass.ConnectionSettings_L3.Builder builderForValue) {
-        if (l3Builder_ == null) {
-          l3_ = builderForValue.build();
-          onChanged();
-        } else {
-          l3Builder_.setMessage(builderForValue.build());
-        }
 
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       */
-      public Builder mergeL3(context.ContextOuterClass.ConnectionSettings_L3 value) {
-        if (l3Builder_ == null) {
-          if (l3_ != null) {
-            l3_ =
-              context.ContextOuterClass.ConnectionSettings_L3.newBuilder(l3_).mergeFrom(value).buildPartial();
-          } else {
-            l3_ = value;
-          }
-          onChanged();
-        } else {
-          l3Builder_.mergeFrom(value);
-        }
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L4)
+    }
 
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       */
-      public Builder clearL3() {
-        if (l3Builder_ == null) {
-          l3_ = null;
-          onChanged();
-        } else {
-          l3_ = null;
-          l3Builder_ = null;
-        }
+    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L4)
+    private static final context.ContextOuterClass.ConnectionSettings_L4 DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L4();
+    }
 
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       */
-      public context.ContextOuterClass.ConnectionSettings_L3.Builder getL3Builder() {
-        
-        onChanged();
-        return getL3FieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       */
-      public context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder() {
-        if (l3Builder_ != null) {
-          return l3Builder_.getMessageOrBuilder();
-        } else {
-          return l3_ == null ?
-              context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
-        }
-      }
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder> 
-          getL3FieldBuilder() {
-        if (l3Builder_ == null) {
-          l3Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder>(
-                  getL3(),
-                  getParentForChildren(),
-                  isClean());
-          l3_ = null;
-        }
-        return l3Builder_;
-      }
-
-      private context.ContextOuterClass.ConnectionSettings_L4 l4_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder> l4Builder_;
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       * @return Whether the l4 field is set.
-       */
-      public boolean hasL4() {
-        return l4Builder_ != null || l4_ != null;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       * @return The l4.
-       */
-      public context.ContextOuterClass.ConnectionSettings_L4 getL4() {
-        if (l4Builder_ == null) {
-          return l4_ == null ? context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
-        } else {
-          return l4Builder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       */
-      public Builder setL4(context.ContextOuterClass.ConnectionSettings_L4 value) {
-        if (l4Builder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          l4_ = value;
-          onChanged();
-        } else {
-          l4Builder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       */
-      public Builder setL4(
-          context.ContextOuterClass.ConnectionSettings_L4.Builder builderForValue) {
-        if (l4Builder_ == null) {
-          l4_ = builderForValue.build();
-          onChanged();
-        } else {
-          l4Builder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       */
-      public Builder mergeL4(context.ContextOuterClass.ConnectionSettings_L4 value) {
-        if (l4Builder_ == null) {
-          if (l4_ != null) {
-            l4_ =
-              context.ContextOuterClass.ConnectionSettings_L4.newBuilder(l4_).mergeFrom(value).buildPartial();
-          } else {
-            l4_ = value;
-          }
-          onChanged();
-        } else {
-          l4Builder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       */
-      public Builder clearL4() {
-        if (l4Builder_ == null) {
-          l4_ = null;
-          onChanged();
-        } else {
-          l4_ = null;
-          l4Builder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       */
-      public context.ContextOuterClass.ConnectionSettings_L4.Builder getL4Builder() {
-        
-        onChanged();
-        return getL4FieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       */
-      public context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder() {
-        if (l4Builder_ != null) {
-          return l4Builder_.getMessageOrBuilder();
-        } else {
-          return l4_ == null ?
-              context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
-        }
-      }
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder> 
-          getL4FieldBuilder() {
-        if (l4Builder_ == null) {
-          l4Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder>(
-                  getL4(),
-                  getParentForChildren(),
-                  isClean());
-          l4_ = null;
-        }
-        return l4Builder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings)
-    }
-
-    // @@protoc_insertion_point(class_scope:context.ConnectionSettings)
-    private static final context.ContextOuterClass.ConnectionSettings DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings();
-    }
-
-    public static context.ContextOuterClass.ConnectionSettings getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<ConnectionSettings>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings>() {
-      @java.lang.Override
-      public ConnectionSettings parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionSettings(input, extensionRegistry);
+    public static context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ConnectionSettings_L4>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L4>() {
+      @java.lang.Override
+      public ConnectionSettings_L4 parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ConnectionSettings_L4(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionSettings> parser() {
+    public static com.google.protobuf.Parser<ConnectionSettings_L4> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionSettings> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionSettings_L4> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Connection)
+  public interface ConnectionSettingsOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
-     * @return Whether the connectionId field is set.
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * @return Whether the l0 field is set.
      */
-    boolean hasConnectionId();
+    boolean hasL0();
     /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
-     * @return The connectionId.
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * @return The l0.
      */
-    context.ContextOuterClass.ConnectionId getConnectionId();
+    context.ContextOuterClass.ConnectionSettings_L0 getL0();
     /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
      */
-    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
+    context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder();
 
     /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     * @return Whether the serviceId field is set.
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+     * @return Whether the l2 field is set.
      */
-    boolean hasServiceId();
+    boolean hasL2();
     /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     * @return The serviceId.
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+     * @return The l2.
      */
-    context.ContextOuterClass.ServiceId getServiceId();
+    context.ContextOuterClass.ConnectionSettings_L2 getL2();
     /**
-     * <code>.context.ServiceId service_id = 2;</code>
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
      */
-    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
+    context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder();
 
     /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-     */
-    java.util.List<context.ContextOuterClass.EndPointId> 
-        getPathHopsEndpointIdsList();
-    /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-     */
-    context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index);
-    /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     * @return Whether the l3 field is set.
      */
-    int getPathHopsEndpointIdsCount();
+    boolean hasL3();
     /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     * @return The l3.
      */
-    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getPathHopsEndpointIdsOrBuilderList();
+    context.ContextOuterClass.ConnectionSettings_L3 getL3();
     /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
      */
-    context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
-        int index);
+    context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder();
 
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     * @return Whether the l4 field is set.
      */
-    java.util.List<context.ContextOuterClass.ServiceId> 
-        getSubServiceIdsList();
+    boolean hasL4();
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     * @return The l4.
      */
-    context.ContextOuterClass.ServiceId getSubServiceIds(int index);
+    context.ContextOuterClass.ConnectionSettings_L4 getL4();
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-     */
-    int getSubServiceIdsCount();
-    /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getSubServiceIdsOrBuilderList();
-    /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-     */
-    context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
-        int index);
-
-    /**
-     * <code>.context.ConnectionSettings settings = 5;</code>
-     * @return Whether the settings field is set.
-     */
-    boolean hasSettings();
-    /**
-     * <code>.context.ConnectionSettings settings = 5;</code>
-     * @return The settings.
-     */
-    context.ContextOuterClass.ConnectionSettings getSettings();
-    /**
-     * <code>.context.ConnectionSettings settings = 5;</code>
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
      */
-    context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder();
+    context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder();
   }
   /**
-   * Protobuf type {@code context.Connection}
+   * Protobuf type {@code context.ConnectionSettings}
    */
-  public static final class Connection extends
+  public static final class ConnectionSettings extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Connection)
-      ConnectionOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings)
+      ConnectionSettingsOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Connection.newBuilder() to construct.
-    private Connection(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings.newBuilder() to construct.
+    private ConnectionSettings(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Connection() {
-      pathHopsEndpointIds_ = java.util.Collections.emptyList();
-      subServiceIds_ = java.util.Collections.emptyList();
+    private ConnectionSettings() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Connection();
+      return new ConnectionSettings();
     }
 
     @java.lang.Override
@@ -41237,7 +40968,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Connection(
+    private ConnectionSettings(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -41245,7 +40976,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -41257,58 +40987,53 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.ConnectionId.Builder subBuilder = null;
-              if (connectionId_ != null) {
-                subBuilder = connectionId_.toBuilder();
+              context.ContextOuterClass.ConnectionSettings_L0.Builder subBuilder = null;
+              if (l0_ != null) {
+                subBuilder = l0_.toBuilder();
               }
-              connectionId_ = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
+              l0_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L0.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(connectionId_);
-                connectionId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(l0_);
+                l0_ = subBuilder.buildPartial();
               }
 
               break;
             }
             case 18: {
-              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
-              if (serviceId_ != null) {
-                subBuilder = serviceId_.toBuilder();
+              context.ContextOuterClass.ConnectionSettings_L2.Builder subBuilder = null;
+              if (l2_ != null) {
+                subBuilder = l2_.toBuilder();
               }
-              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
+              l2_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L2.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(serviceId_);
-                serviceId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(l2_);
+                l2_ = subBuilder.buildPartial();
               }
 
               break;
             }
             case 26: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                pathHopsEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
-                mutable_bitField0_ |= 0x00000001;
+              context.ContextOuterClass.ConnectionSettings_L3.Builder subBuilder = null;
+              if (l3_ != null) {
+                subBuilder = l3_.toBuilder();
               }
-              pathHopsEndpointIds_.add(
-                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
-              break;
-            }
-            case 34: {
-              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                subServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
-                mutable_bitField0_ |= 0x00000002;
+              l3_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L3.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(l3_);
+                l3_ = subBuilder.buildPartial();
               }
-              subServiceIds_.add(
-                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
+
               break;
             }
-            case 42: {
-              context.ContextOuterClass.ConnectionSettings.Builder subBuilder = null;
-              if (settings_ != null) {
-                subBuilder = settings_.toBuilder();
+            case 34: {
+              context.ContextOuterClass.ConnectionSettings_L4.Builder subBuilder = null;
+              if (l4_ != null) {
+                subBuilder = l4_.toBuilder();
               }
-              settings_ = input.readMessage(context.ContextOuterClass.ConnectionSettings.parser(), extensionRegistry);
+              l4_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L4.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(settings_);
-                settings_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(l4_);
+                l4_ = subBuilder.buildPartial();
               }
 
               break;
@@ -41328,215 +41053,152 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          pathHopsEndpointIds_ = java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
-        }
-        if (((mutable_bitField0_ & 0x00000002) != 0)) {
-          subServiceIds_ = java.util.Collections.unmodifiableList(subServiceIds_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Connection_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Connection.class, context.ContextOuterClass.Connection.Builder.class);
+              context.ContextOuterClass.ConnectionSettings.class, context.ContextOuterClass.ConnectionSettings.Builder.class);
     }
 
-    public static final int CONNECTION_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.ConnectionId connectionId_;
+    public static final int L0_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ConnectionSettings_L0 l0_;
     /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
-     * @return Whether the connectionId field is set.
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * @return Whether the l0 field is set.
      */
     @java.lang.Override
-    public boolean hasConnectionId() {
-      return connectionId_ != null;
+    public boolean hasL0() {
+      return l0_ != null;
     }
     /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
-     * @return The connectionId.
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * @return The l0.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionId getConnectionId() {
-      return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+    public context.ContextOuterClass.ConnectionSettings_L0 getL0() {
+      return l0_ == null ? context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
     }
     /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
-      return getConnectionId();
+    public context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder() {
+      return getL0();
     }
 
-    public static final int SERVICE_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.ServiceId serviceId_;
+    public static final int L2_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ConnectionSettings_L2 l2_;
     /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     * @return Whether the serviceId field is set.
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+     * @return Whether the l2 field is set.
      */
     @java.lang.Override
-    public boolean hasServiceId() {
-      return serviceId_ != null;
+    public boolean hasL2() {
+      return l2_ != null;
     }
     /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     * @return The serviceId.
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+     * @return The l2.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceId getServiceId() {
-      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+    public context.ContextOuterClass.ConnectionSettings_L2 getL2() {
+      return l2_ == null ? context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
     }
     /**
-     * <code>.context.ServiceId service_id = 2;</code>
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-      return getServiceId();
+    public context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder() {
+      return getL2();
     }
 
-    public static final int PATH_HOPS_ENDPOINT_IDS_FIELD_NUMBER = 3;
-    private java.util.List<context.ContextOuterClass.EndPointId> pathHopsEndpointIds_;
-    /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.EndPointId> getPathHopsEndpointIdsList() {
-      return pathHopsEndpointIds_;
-    }
-    /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getPathHopsEndpointIdsOrBuilderList() {
-      return pathHopsEndpointIds_;
-    }
+    public static final int L3_FIELD_NUMBER = 3;
+    private context.ContextOuterClass.ConnectionSettings_L3 l3_;
     /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     * @return Whether the l3 field is set.
      */
     @java.lang.Override
-    public int getPathHopsEndpointIdsCount() {
-      return pathHopsEndpointIds_.size();
+    public boolean hasL3() {
+      return l3_ != null;
     }
     /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     * @return The l3.
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index) {
-      return pathHopsEndpointIds_.get(index);
+    public context.ContextOuterClass.ConnectionSettings_L3 getL3() {
+      return l3_ == null ? context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
     }
     /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
-        int index) {
-      return pathHopsEndpointIds_.get(index);
+    public context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder() {
+      return getL3();
     }
 
-    public static final int SUB_SERVICE_IDS_FIELD_NUMBER = 4;
-    private java.util.List<context.ContextOuterClass.ServiceId> subServiceIds_;
+    public static final int L4_FIELD_NUMBER = 4;
+    private context.ContextOuterClass.ConnectionSettings_L4 l4_;
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     * @return Whether the l4 field is set.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ServiceId> getSubServiceIdsList() {
-      return subServiceIds_;
+    public boolean hasL4() {
+      return l4_ != null;
     }
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     * @return The l4.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getSubServiceIdsOrBuilderList() {
-      return subServiceIds_;
+    public context.ContextOuterClass.ConnectionSettings_L4 getL4() {
+      return l4_ == null ? context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
     }
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
      */
     @java.lang.Override
-    public int getSubServiceIdsCount() {
-      return subServiceIds_.size();
+    public context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder() {
+      return getL4();
     }
-    /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-     */
+
+    private byte memoizedIsInitialized = -1;
     @java.lang.Override
-    public context.ContextOuterClass.ServiceId getSubServiceIds(int index) {
-      return subServiceIds_.get(index);
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
     }
-    /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
-        int index) {
-      return subServiceIds_.get(index);
-    }
-
-    public static final int SETTINGS_FIELD_NUMBER = 5;
-    private context.ContextOuterClass.ConnectionSettings settings_;
-    /**
-     * <code>.context.ConnectionSettings settings = 5;</code>
-     * @return Whether the settings field is set.
-     */
-    @java.lang.Override
-    public boolean hasSettings() {
-      return settings_ != null;
-    }
-    /**
-     * <code>.context.ConnectionSettings settings = 5;</code>
-     * @return The settings.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings getSettings() {
-      return settings_ == null ? context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
-    }
-    /**
-     * <code>.context.ConnectionSettings settings = 5;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder() {
-      return getSettings();
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
+
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (connectionId_ != null) {
-        output.writeMessage(1, getConnectionId());
-      }
-      if (serviceId_ != null) {
-        output.writeMessage(2, getServiceId());
+      if (l0_ != null) {
+        output.writeMessage(1, getL0());
       }
-      for (int i = 0; i < pathHopsEndpointIds_.size(); i++) {
-        output.writeMessage(3, pathHopsEndpointIds_.get(i));
+      if (l2_ != null) {
+        output.writeMessage(2, getL2());
       }
-      for (int i = 0; i < subServiceIds_.size(); i++) {
-        output.writeMessage(4, subServiceIds_.get(i));
+      if (l3_ != null) {
+        output.writeMessage(3, getL3());
       }
-      if (settings_ != null) {
-        output.writeMessage(5, getSettings());
+      if (l4_ != null) {
+        output.writeMessage(4, getL4());
       }
       unknownFields.writeTo(output);
     }
@@ -41547,25 +41209,21 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (connectionId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getConnectionId());
-      }
-      if (serviceId_ != null) {
+      if (l0_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getServiceId());
+          .computeMessageSize(1, getL0());
       }
-      for (int i = 0; i < pathHopsEndpointIds_.size(); i++) {
+      if (l2_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, pathHopsEndpointIds_.get(i));
+          .computeMessageSize(2, getL2());
       }
-      for (int i = 0; i < subServiceIds_.size(); i++) {
+      if (l3_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, subServiceIds_.get(i));
+          .computeMessageSize(3, getL3());
       }
-      if (settings_ != null) {
+      if (l4_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, getSettings());
+          .computeMessageSize(4, getL4());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -41577,29 +41235,30 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Connection)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Connection other = (context.ContextOuterClass.Connection) obj;
+      context.ContextOuterClass.ConnectionSettings other = (context.ContextOuterClass.ConnectionSettings) obj;
 
-      if (hasConnectionId() != other.hasConnectionId()) return false;
-      if (hasConnectionId()) {
-        if (!getConnectionId()
-            .equals(other.getConnectionId())) return false;
+      if (hasL0() != other.hasL0()) return false;
+      if (hasL0()) {
+        if (!getL0()
+            .equals(other.getL0())) return false;
       }
-      if (hasServiceId() != other.hasServiceId()) return false;
-      if (hasServiceId()) {
-        if (!getServiceId()
-            .equals(other.getServiceId())) return false;
+      if (hasL2() != other.hasL2()) return false;
+      if (hasL2()) {
+        if (!getL2()
+            .equals(other.getL2())) return false;
       }
-      if (!getPathHopsEndpointIdsList()
-          .equals(other.getPathHopsEndpointIdsList())) return false;
-      if (!getSubServiceIdsList()
-          .equals(other.getSubServiceIdsList())) return false;
-      if (hasSettings() != other.hasSettings()) return false;
-      if (hasSettings()) {
-        if (!getSettings()
-            .equals(other.getSettings())) return false;
+      if (hasL3() != other.hasL3()) return false;
+      if (hasL3()) {
+        if (!getL3()
+            .equals(other.getL3())) return false;
+      }
+      if (hasL4() != other.hasL4()) return false;
+      if (hasL4()) {
+        if (!getL4()
+            .equals(other.getL4())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -41612,94 +41271,90 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasConnectionId()) {
-        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionId().hashCode();
-      }
-      if (hasServiceId()) {
-        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceId().hashCode();
+      if (hasL0()) {
+        hash = (37 * hash) + L0_FIELD_NUMBER;
+        hash = (53 * hash) + getL0().hashCode();
       }
-      if (getPathHopsEndpointIdsCount() > 0) {
-        hash = (37 * hash) + PATH_HOPS_ENDPOINT_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getPathHopsEndpointIdsList().hashCode();
+      if (hasL2()) {
+        hash = (37 * hash) + L2_FIELD_NUMBER;
+        hash = (53 * hash) + getL2().hashCode();
       }
-      if (getSubServiceIdsCount() > 0) {
-        hash = (37 * hash) + SUB_SERVICE_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getSubServiceIdsList().hashCode();
+      if (hasL3()) {
+        hash = (37 * hash) + L3_FIELD_NUMBER;
+        hash = (53 * hash) + getL3().hashCode();
       }
-      if (hasSettings()) {
-        hash = (37 * hash) + SETTINGS_FIELD_NUMBER;
-        hash = (53 * hash) + getSettings().hashCode();
+      if (hasL4()) {
+        hash = (37 * hash) + L4_FIELD_NUMBER;
+        hash = (53 * hash) + getL4().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Connection parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -41712,7 +41367,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Connection prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -41728,26 +41383,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Connection}
+     * Protobuf type {@code context.ConnectionSettings}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Connection)
-        context.ContextOuterClass.ConnectionOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings)
+        context.ContextOuterClass.ConnectionSettingsOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Connection_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Connection.class, context.ContextOuterClass.Connection.Builder.class);
+                context.ContextOuterClass.ConnectionSettings.class, context.ContextOuterClass.ConnectionSettings.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Connection.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -41760,42 +41415,34 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getPathHopsEndpointIdsFieldBuilder();
-          getSubServiceIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = null;
-        } else {
-          connectionId_ = null;
-          connectionIdBuilder_ = null;
-        }
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
+        if (l0Builder_ == null) {
+          l0_ = null;
         } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
+          l0_ = null;
+          l0Builder_ = null;
         }
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          pathHopsEndpointIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (l2Builder_ == null) {
+          l2_ = null;
         } else {
-          pathHopsEndpointIdsBuilder_.clear();
+          l2_ = null;
+          l2Builder_ = null;
         }
-        if (subServiceIdsBuilder_ == null) {
-          subServiceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
+        if (l3Builder_ == null) {
+          l3_ = null;
         } else {
-          subServiceIdsBuilder_.clear();
+          l3_ = null;
+          l3Builder_ = null;
         }
-        if (settingsBuilder_ == null) {
-          settings_ = null;
+        if (l4Builder_ == null) {
+          l4_ = null;
         } else {
-          settings_ = null;
-          settingsBuilder_ = null;
+          l4_ = null;
+          l4Builder_ = null;
         }
         return this;
       }
@@ -41803,17 +41450,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Connection getDefaultInstanceForType() {
-        return context.ContextOuterClass.Connection.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Connection build() {
-        context.ContextOuterClass.Connection result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings build() {
+        context.ContextOuterClass.ConnectionSettings result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -41821,41 +41468,27 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Connection buildPartial() {
-        context.ContextOuterClass.Connection result = new context.ContextOuterClass.Connection(this);
-        int from_bitField0_ = bitField0_;
-        if (connectionIdBuilder_ == null) {
-          result.connectionId_ = connectionId_;
+      public context.ContextOuterClass.ConnectionSettings buildPartial() {
+        context.ContextOuterClass.ConnectionSettings result = new context.ContextOuterClass.ConnectionSettings(this);
+        if (l0Builder_ == null) {
+          result.l0_ = l0_;
         } else {
-          result.connectionId_ = connectionIdBuilder_.build();
+          result.l0_ = l0Builder_.build();
         }
-        if (serviceIdBuilder_ == null) {
-          result.serviceId_ = serviceId_;
+        if (l2Builder_ == null) {
+          result.l2_ = l2_;
         } else {
-          result.serviceId_ = serviceIdBuilder_.build();
+          result.l2_ = l2Builder_.build();
         }
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            pathHopsEndpointIds_ = java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.pathHopsEndpointIds_ = pathHopsEndpointIds_;
-        } else {
-          result.pathHopsEndpointIds_ = pathHopsEndpointIdsBuilder_.build();
-        }
-        if (subServiceIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000002) != 0)) {
-            subServiceIds_ = java.util.Collections.unmodifiableList(subServiceIds_);
-            bitField0_ = (bitField0_ & ~0x00000002);
-          }
-          result.subServiceIds_ = subServiceIds_;
+        if (l3Builder_ == null) {
+          result.l3_ = l3_;
         } else {
-          result.subServiceIds_ = subServiceIdsBuilder_.build();
+          result.l3_ = l3Builder_.build();
         }
-        if (settingsBuilder_ == null) {
-          result.settings_ = settings_;
+        if (l4Builder_ == null) {
+          result.l4_ = l4_;
         } else {
-          result.settings_ = settingsBuilder_.build();
+          result.l4_ = l4Builder_.build();
         }
         onBuilt();
         return result;
@@ -41895,76 +41528,27 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Connection) {
-          return mergeFrom((context.ContextOuterClass.Connection)other);
+        if (other instanceof context.ContextOuterClass.ConnectionSettings) {
+          return mergeFrom((context.ContextOuterClass.ConnectionSettings)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Connection other) {
-        if (other == context.ContextOuterClass.Connection.getDefaultInstance()) return this;
-        if (other.hasConnectionId()) {
-          mergeConnectionId(other.getConnectionId());
-        }
-        if (other.hasServiceId()) {
-          mergeServiceId(other.getServiceId());
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings other) {
+        if (other == context.ContextOuterClass.ConnectionSettings.getDefaultInstance()) return this;
+        if (other.hasL0()) {
+          mergeL0(other.getL0());
         }
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          if (!other.pathHopsEndpointIds_.isEmpty()) {
-            if (pathHopsEndpointIds_.isEmpty()) {
-              pathHopsEndpointIds_ = other.pathHopsEndpointIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensurePathHopsEndpointIdsIsMutable();
-              pathHopsEndpointIds_.addAll(other.pathHopsEndpointIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.pathHopsEndpointIds_.isEmpty()) {
-            if (pathHopsEndpointIdsBuilder_.isEmpty()) {
-              pathHopsEndpointIdsBuilder_.dispose();
-              pathHopsEndpointIdsBuilder_ = null;
-              pathHopsEndpointIds_ = other.pathHopsEndpointIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              pathHopsEndpointIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getPathHopsEndpointIdsFieldBuilder() : null;
-            } else {
-              pathHopsEndpointIdsBuilder_.addAllMessages(other.pathHopsEndpointIds_);
-            }
-          }
+        if (other.hasL2()) {
+          mergeL2(other.getL2());
         }
-        if (subServiceIdsBuilder_ == null) {
-          if (!other.subServiceIds_.isEmpty()) {
-            if (subServiceIds_.isEmpty()) {
-              subServiceIds_ = other.subServiceIds_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-            } else {
-              ensureSubServiceIdsIsMutable();
-              subServiceIds_.addAll(other.subServiceIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.subServiceIds_.isEmpty()) {
-            if (subServiceIdsBuilder_.isEmpty()) {
-              subServiceIdsBuilder_.dispose();
-              subServiceIdsBuilder_ = null;
-              subServiceIds_ = other.subServiceIds_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-              subServiceIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSubServiceIdsFieldBuilder() : null;
-            } else {
-              subServiceIdsBuilder_.addAllMessages(other.subServiceIds_);
-            }
-          }
+        if (other.hasL3()) {
+          mergeL3(other.getL3());
         }
-        if (other.hasSettings()) {
-          mergeSettings(other.getSettings());
+        if (other.hasL4()) {
+          mergeL4(other.getL4());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -41981,11 +41565,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Connection parsedMessage = null;
+        context.ContextOuterClass.ConnectionSettings parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Connection) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -41994,843 +41578,3048 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
 
-      private context.ContextOuterClass.ConnectionId connectionId_;
+      private context.ContextOuterClass.ConnectionSettings_L0 l0_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdBuilder_;
+          context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder> l0Builder_;
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       * @return Whether the connectionId field is set.
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * @return Whether the l0 field is set.
        */
-      public boolean hasConnectionId() {
-        return connectionIdBuilder_ != null || connectionId_ != null;
+      public boolean hasL0() {
+        return l0Builder_ != null || l0_ != null;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       * @return The connectionId.
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * @return The l0.
        */
-      public context.ContextOuterClass.ConnectionId getConnectionId() {
-        if (connectionIdBuilder_ == null) {
-          return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+      public context.ContextOuterClass.ConnectionSettings_L0 getL0() {
+        if (l0Builder_ == null) {
+          return l0_ == null ? context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
         } else {
-          return connectionIdBuilder_.getMessage();
+          return l0Builder_.getMessage();
         }
       }
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
        */
-      public Builder setConnectionId(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdBuilder_ == null) {
+      public Builder setL0(context.ContextOuterClass.ConnectionSettings_L0 value) {
+        if (l0Builder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          connectionId_ = value;
+          l0_ = value;
           onChanged();
         } else {
-          connectionIdBuilder_.setMessage(value);
+          l0Builder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
        */
-      public Builder setConnectionId(
-          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = builderForValue.build();
+      public Builder setL0(
+          context.ContextOuterClass.ConnectionSettings_L0.Builder builderForValue) {
+        if (l0Builder_ == null) {
+          l0_ = builderForValue.build();
           onChanged();
         } else {
-          connectionIdBuilder_.setMessage(builderForValue.build());
+          l0Builder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
        */
-      public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdBuilder_ == null) {
-          if (connectionId_ != null) {
-            connectionId_ =
-              context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
+      public Builder mergeL0(context.ContextOuterClass.ConnectionSettings_L0 value) {
+        if (l0Builder_ == null) {
+          if (l0_ != null) {
+            l0_ =
+              context.ContextOuterClass.ConnectionSettings_L0.newBuilder(l0_).mergeFrom(value).buildPartial();
           } else {
-            connectionId_ = value;
+            l0_ = value;
           }
           onChanged();
         } else {
-          connectionIdBuilder_.mergeFrom(value);
+          l0Builder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
        */
-      public Builder clearConnectionId() {
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = null;
+      public Builder clearL0() {
+        if (l0Builder_ == null) {
+          l0_ = null;
           onChanged();
         } else {
-          connectionId_ = null;
-          connectionIdBuilder_ = null;
+          l0_ = null;
+          l0Builder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
+      public context.ContextOuterClass.ConnectionSettings_L0.Builder getL0Builder() {
         
         onChanged();
-        return getConnectionIdFieldBuilder().getBuilder();
+        return getL0FieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
-        if (connectionIdBuilder_ != null) {
-          return connectionIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder() {
+        if (l0Builder_ != null) {
+          return l0Builder_.getMessageOrBuilder();
         } else {
-          return connectionId_ == null ?
-              context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+          return l0_ == null ?
+              context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
         }
       }
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
-          getConnectionIdFieldBuilder() {
-        if (connectionIdBuilder_ == null) {
-          connectionIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
-                  getConnectionId(),
+          context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder> 
+          getL0FieldBuilder() {
+        if (l0Builder_ == null) {
+          l0Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder>(
+                  getL0(),
                   getParentForChildren(),
                   isClean());
-          connectionId_ = null;
+          l0_ = null;
         }
-        return connectionIdBuilder_;
+        return l0Builder_;
       }
 
-      private context.ContextOuterClass.ServiceId serviceId_;
+      private context.ContextOuterClass.ConnectionSettings_L2 l2_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
+          context.ContextOuterClass.ConnectionSettings_L2, context.ContextOuterClass.ConnectionSettings_L2.Builder, context.ContextOuterClass.ConnectionSettings_L2OrBuilder> l2Builder_;
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
-       * @return Whether the serviceId field is set.
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       * @return Whether the l2 field is set.
        */
-      public boolean hasServiceId() {
-        return serviceIdBuilder_ != null || serviceId_ != null;
+      public boolean hasL2() {
+        return l2Builder_ != null || l2_ != null;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
-       * @return The serviceId.
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       * @return The l2.
        */
-      public context.ContextOuterClass.ServiceId getServiceId() {
-        if (serviceIdBuilder_ == null) {
-          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+      public context.ContextOuterClass.ConnectionSettings_L2 getL2() {
+        if (l2Builder_ == null) {
+          return l2_ == null ? context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
         } else {
-          return serviceIdBuilder_.getMessage();
+          return l2Builder_.getMessage();
         }
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
-      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
+      public Builder setL2(context.ContextOuterClass.ConnectionSettings_L2 value) {
+        if (l2Builder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          serviceId_ = value;
+          l2_ = value;
           onChanged();
         } else {
-          serviceIdBuilder_.setMessage(value);
+          l2Builder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
-      public Builder setServiceId(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = builderForValue.build();
+      public Builder setL2(
+          context.ContextOuterClass.ConnectionSettings_L2.Builder builderForValue) {
+        if (l2Builder_ == null) {
+          l2_ = builderForValue.build();
           onChanged();
         } else {
-          serviceIdBuilder_.setMessage(builderForValue.build());
+          l2Builder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
-      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
-          if (serviceId_ != null) {
-            serviceId_ =
-              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
+      public Builder mergeL2(context.ContextOuterClass.ConnectionSettings_L2 value) {
+        if (l2Builder_ == null) {
+          if (l2_ != null) {
+            l2_ =
+              context.ContextOuterClass.ConnectionSettings_L2.newBuilder(l2_).mergeFrom(value).buildPartial();
           } else {
-            serviceId_ = value;
+            l2_ = value;
           }
           onChanged();
         } else {
-          serviceIdBuilder_.mergeFrom(value);
+          l2Builder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
-      public Builder clearServiceId() {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
+      public Builder clearL2() {
+        if (l2Builder_ == null) {
+          l2_ = null;
           onChanged();
         } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
+          l2_ = null;
+          l2Builder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
-      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+      public context.ContextOuterClass.ConnectionSettings_L2.Builder getL2Builder() {
         
         onChanged();
-        return getServiceIdFieldBuilder().getBuilder();
+        return getL2FieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
-      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-        if (serviceIdBuilder_ != null) {
-          return serviceIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder() {
+        if (l2Builder_ != null) {
+          return l2Builder_.getMessageOrBuilder();
         } else {
-          return serviceId_ == null ?
-              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+          return l2_ == null ?
+              context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
         }
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getServiceIdFieldBuilder() {
-        if (serviceIdBuilder_ == null) {
-          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  getServiceId(),
+          context.ContextOuterClass.ConnectionSettings_L2, context.ContextOuterClass.ConnectionSettings_L2.Builder, context.ContextOuterClass.ConnectionSettings_L2OrBuilder> 
+          getL2FieldBuilder() {
+        if (l2Builder_ == null) {
+          l2Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionSettings_L2, context.ContextOuterClass.ConnectionSettings_L2.Builder, context.ContextOuterClass.ConnectionSettings_L2OrBuilder>(
+                  getL2(),
                   getParentForChildren(),
                   isClean());
-          serviceId_ = null;
+          l2_ = null;
         }
-        return serviceIdBuilder_;
-      }
-
-      private java.util.List<context.ContextOuterClass.EndPointId> pathHopsEndpointIds_ =
-        java.util.Collections.emptyList();
-      private void ensurePathHopsEndpointIdsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          pathHopsEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(pathHopsEndpointIds_);
-          bitField0_ |= 0x00000001;
-         }
+        return l2Builder_;
       }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> pathHopsEndpointIdsBuilder_;
-
-      /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-       */
-      public java.util.List<context.ContextOuterClass.EndPointId> getPathHopsEndpointIdsList() {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
-        } else {
-          return pathHopsEndpointIdsBuilder_.getMessageList();
-        }
-      }
+      private context.ContextOuterClass.ConnectionSettings_L3 l3_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder> l3Builder_;
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+       * @return Whether the l3 field is set.
        */
-      public int getPathHopsEndpointIdsCount() {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          return pathHopsEndpointIds_.size();
-        } else {
-          return pathHopsEndpointIdsBuilder_.getCount();
-        }
+      public boolean hasL3() {
+        return l3Builder_ != null || l3_ != null;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+       * @return The l3.
        */
-      public context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          return pathHopsEndpointIds_.get(index);
+      public context.ContextOuterClass.ConnectionSettings_L3 getL3() {
+        if (l3Builder_ == null) {
+          return l3_ == null ? context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
         } else {
-          return pathHopsEndpointIdsBuilder_.getMessage(index);
+          return l3Builder_.getMessage();
         }
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder setPathHopsEndpointIds(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
+      public Builder setL3(context.ContextOuterClass.ConnectionSettings_L3 value) {
+        if (l3Builder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.set(index, value);
+          l3_ = value;
           onChanged();
         } else {
-          pathHopsEndpointIdsBuilder_.setMessage(index, value);
+          l3Builder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder setPathHopsEndpointIds(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.set(index, builderForValue.build());
+      public Builder setL3(
+          context.ContextOuterClass.ConnectionSettings_L3.Builder builderForValue) {
+        if (l3Builder_ == null) {
+          l3_ = builderForValue.build();
           onChanged();
         } else {
-          pathHopsEndpointIdsBuilder_.setMessage(index, builderForValue.build());
+          l3Builder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder addPathHopsEndpointIds(context.ContextOuterClass.EndPointId value) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeL3(context.ContextOuterClass.ConnectionSettings_L3 value) {
+        if (l3Builder_ == null) {
+          if (l3_ != null) {
+            l3_ =
+              context.ContextOuterClass.ConnectionSettings_L3.newBuilder(l3_).mergeFrom(value).buildPartial();
+          } else {
+            l3_ = value;
           }
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.add(value);
           onChanged();
         } else {
-          pathHopsEndpointIdsBuilder_.addMessage(value);
+          l3Builder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder addPathHopsEndpointIds(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.add(index, value);
+      public Builder clearL3() {
+        if (l3Builder_ == null) {
+          l3_ = null;
           onChanged();
         } else {
-          pathHopsEndpointIdsBuilder_.addMessage(index, value);
+          l3_ = null;
+          l3Builder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder addPathHopsEndpointIds(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.add(builderForValue.build());
-          onChanged();
-        } else {
-          pathHopsEndpointIdsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
+      public context.ContextOuterClass.ConnectionSettings_L3.Builder getL3Builder() {
+        
+        onChanged();
+        return getL3FieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder addPathHopsEndpointIds(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.add(index, builderForValue.build());
-          onChanged();
+      public context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder() {
+        if (l3Builder_ != null) {
+          return l3Builder_.getMessageOrBuilder();
         } else {
-          pathHopsEndpointIdsBuilder_.addMessage(index, builderForValue.build());
+          return l3_ == null ?
+              context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder addAllPathHopsEndpointIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          ensurePathHopsEndpointIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, pathHopsEndpointIds_);
-          onChanged();
-        } else {
-          pathHopsEndpointIdsBuilder_.addAllMessages(values);
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder> 
+          getL3FieldBuilder() {
+        if (l3Builder_ == null) {
+          l3Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder>(
+                  getL3(),
+                  getParentForChildren(),
+                  isClean());
+          l3_ = null;
         }
-        return this;
+        return l3Builder_;
       }
+
+      private context.ContextOuterClass.ConnectionSettings_L4 l4_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder> l4Builder_;
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+       * @return Whether the l4 field is set.
        */
-      public Builder clearPathHopsEndpointIds() {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          pathHopsEndpointIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
+      public boolean hasL4() {
+        return l4Builder_ != null || l4_ != null;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+       * @return The l4.
+       */
+      public context.ContextOuterClass.ConnectionSettings_L4 getL4() {
+        if (l4Builder_ == null) {
+          return l4_ == null ? context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
         } else {
-          pathHopsEndpointIdsBuilder_.clear();
+          return l4Builder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public Builder removePathHopsEndpointIds(int index) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.remove(index);
+      public Builder setL4(context.ContextOuterClass.ConnectionSettings_L4 value) {
+        if (l4Builder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          l4_ = value;
           onChanged();
         } else {
-          pathHopsEndpointIdsBuilder_.remove(index);
+          l4Builder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder getPathHopsEndpointIdsBuilder(
-          int index) {
-        return getPathHopsEndpointIdsFieldBuilder().getBuilder(index);
+      public Builder setL4(
+          context.ContextOuterClass.ConnectionSettings_L4.Builder builderForValue) {
+        if (l4Builder_ == null) {
+          l4_ = builderForValue.build();
+          onChanged();
+        } else {
+          l4Builder_.setMessage(builderForValue.build());
+        }
+
+        return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
-          int index) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          return pathHopsEndpointIds_.get(index);  } else {
-          return pathHopsEndpointIdsBuilder_.getMessageOrBuilder(index);
+      public Builder mergeL4(context.ContextOuterClass.ConnectionSettings_L4 value) {
+        if (l4Builder_ == null) {
+          if (l4_ != null) {
+            l4_ =
+              context.ContextOuterClass.ConnectionSettings_L4.newBuilder(l4_).mergeFrom(value).buildPartial();
+          } else {
+            l4_ = value;
+          }
+          onChanged();
+        } else {
+          l4Builder_.mergeFrom(value);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-           getPathHopsEndpointIdsOrBuilderList() {
-        if (pathHopsEndpointIdsBuilder_ != null) {
-          return pathHopsEndpointIdsBuilder_.getMessageOrBuilderList();
+      public Builder clearL4() {
+        if (l4Builder_ == null) {
+          l4_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+          l4_ = null;
+          l4Builder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder addPathHopsEndpointIdsBuilder() {
-        return getPathHopsEndpointIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.EndPointId.getDefaultInstance());
+      public context.ContextOuterClass.ConnectionSettings_L4.Builder getL4Builder() {
+        
+        onChanged();
+        return getL4FieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder addPathHopsEndpointIdsBuilder(
-          int index) {
-        return getPathHopsEndpointIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+      public context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder() {
+        if (l4Builder_ != null) {
+          return l4Builder_.getMessageOrBuilder();
+        } else {
+          return l4_ == null ?
+              context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
+        }
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
-           getPathHopsEndpointIdsBuilderList() {
-        return getPathHopsEndpointIdsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getPathHopsEndpointIdsFieldBuilder() {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          pathHopsEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  pathHopsEndpointIds_,
-                  ((bitField0_ & 0x00000001) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder> 
+          getL4FieldBuilder() {
+        if (l4Builder_ == null) {
+          l4Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder>(
+                  getL4(),
                   getParentForChildren(),
                   isClean());
-          pathHopsEndpointIds_ = null;
+          l4_ = null;
+        }
+        return l4Builder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ConnectionSettings)
+    private static final context.ContextOuterClass.ConnectionSettings DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings();
+    }
+
+    public static context.ContextOuterClass.ConnectionSettings getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ConnectionSettings>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings>() {
+      @java.lang.Override
+      public ConnectionSettings parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ConnectionSettings(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ConnectionSettings> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ConnectionSettings> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionSettings getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ConnectionOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Connection)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return Whether the connectionId field is set.
+     */
+    boolean hasConnectionId();
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return The connectionId.
+     */
+    context.ContextOuterClass.ConnectionId getConnectionId();
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     */
+    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
+
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return Whether the serviceId field is set.
+     */
+    boolean hasServiceId();
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return The serviceId.
+     */
+    context.ContextOuterClass.ServiceId getServiceId();
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
+
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    java.util.List<context.ContextOuterClass.EndPointId> 
+        getPathHopsEndpointIdsList();
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index);
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    int getPathHopsEndpointIdsCount();
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getPathHopsEndpointIdsOrBuilderList();
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    java.util.List<context.ContextOuterClass.ServiceId> 
+        getSubServiceIdsList();
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    context.ContextOuterClass.ServiceId getSubServiceIds(int index);
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    int getSubServiceIdsCount();
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getSubServiceIdsOrBuilderList();
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     * @return Whether the settings field is set.
+     */
+    boolean hasSettings();
+    /**
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     * @return The settings.
+     */
+    context.ContextOuterClass.ConnectionSettings getSettings();
+    /**
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     */
+    context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder();
+  }
+  /**
+   * Protobuf type {@code context.Connection}
+   */
+  public static final class Connection extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Connection)
+      ConnectionOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Connection.newBuilder() to construct.
+    private Connection(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Connection() {
+      pathHopsEndpointIds_ = java.util.Collections.emptyList();
+      subServiceIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Connection();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Connection(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.ConnectionId.Builder subBuilder = null;
+              if (connectionId_ != null) {
+                subBuilder = connectionId_.toBuilder();
+              }
+              connectionId_ = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(connectionId_);
+                connectionId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
+              if (serviceId_ != null) {
+                subBuilder = serviceId_.toBuilder();
+              }
+              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(serviceId_);
+                serviceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 26: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                pathHopsEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              pathHopsEndpointIds_.add(
+                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
+              break;
+            }
+            case 34: {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                subServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              subServiceIds_.add(
+                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
+              break;
+            }
+            case 42: {
+              context.ContextOuterClass.ConnectionSettings.Builder subBuilder = null;
+              if (settings_ != null) {
+                subBuilder = settings_.toBuilder();
+              }
+              settings_ = input.readMessage(context.ContextOuterClass.ConnectionSettings.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(settings_);
+                settings_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          pathHopsEndpointIds_ = java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+        }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          subServiceIds_ = java.util.Collections.unmodifiableList(subServiceIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Connection_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Connection.class, context.ContextOuterClass.Connection.Builder.class);
+    }
+
+    public static final int CONNECTION_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ConnectionId connectionId_;
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return Whether the connectionId field is set.
+     */
+    @java.lang.Override
+    public boolean hasConnectionId() {
+      return connectionId_ != null;
+    }
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return The connectionId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionId getConnectionId() {
+      return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+    }
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+      return getConnectionId();
+    }
+
+    public static final int SERVICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ServiceId serviceId_;
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return Whether the serviceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasServiceId() {
+      return serviceId_ != null;
+    }
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return The serviceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getServiceId() {
+      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+    }
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+      return getServiceId();
+    }
+
+    public static final int PATH_HOPS_ENDPOINT_IDS_FIELD_NUMBER = 3;
+    private java.util.List<context.ContextOuterClass.EndPointId> pathHopsEndpointIds_;
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.EndPointId> getPathHopsEndpointIdsList() {
+      return pathHopsEndpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getPathHopsEndpointIdsOrBuilderList() {
+      return pathHopsEndpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public int getPathHopsEndpointIdsCount() {
+      return pathHopsEndpointIds_.size();
+    }
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index) {
+      return pathHopsEndpointIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
+        int index) {
+      return pathHopsEndpointIds_.get(index);
+    }
+
+    public static final int SUB_SERVICE_IDS_FIELD_NUMBER = 4;
+    private java.util.List<context.ContextOuterClass.ServiceId> subServiceIds_;
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ServiceId> getSubServiceIdsList() {
+      return subServiceIds_;
+    }
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getSubServiceIdsOrBuilderList() {
+      return subServiceIds_;
+    }
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public int getSubServiceIdsCount() {
+      return subServiceIds_.size();
+    }
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getSubServiceIds(int index) {
+      return subServiceIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
+        int index) {
+      return subServiceIds_.get(index);
+    }
+
+    public static final int SETTINGS_FIELD_NUMBER = 5;
+    private context.ContextOuterClass.ConnectionSettings settings_;
+    /**
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     * @return Whether the settings field is set.
+     */
+    @java.lang.Override
+    public boolean hasSettings() {
+      return settings_ != null;
+    }
+    /**
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     * @return The settings.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionSettings getSettings() {
+      return settings_ == null ? context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
+    }
+    /**
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder() {
+      return getSettings();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (connectionId_ != null) {
+        output.writeMessage(1, getConnectionId());
+      }
+      if (serviceId_ != null) {
+        output.writeMessage(2, getServiceId());
+      }
+      for (int i = 0; i < pathHopsEndpointIds_.size(); i++) {
+        output.writeMessage(3, pathHopsEndpointIds_.get(i));
+      }
+      for (int i = 0; i < subServiceIds_.size(); i++) {
+        output.writeMessage(4, subServiceIds_.get(i));
+      }
+      if (settings_ != null) {
+        output.writeMessage(5, getSettings());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (connectionId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getConnectionId());
+      }
+      if (serviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getServiceId());
+      }
+      for (int i = 0; i < pathHopsEndpointIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, pathHopsEndpointIds_.get(i));
+      }
+      for (int i = 0; i < subServiceIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, subServiceIds_.get(i));
+      }
+      if (settings_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, getSettings());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.Connection)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Connection other = (context.ContextOuterClass.Connection) obj;
+
+      if (hasConnectionId() != other.hasConnectionId()) return false;
+      if (hasConnectionId()) {
+        if (!getConnectionId()
+            .equals(other.getConnectionId())) return false;
+      }
+      if (hasServiceId() != other.hasServiceId()) return false;
+      if (hasServiceId()) {
+        if (!getServiceId()
+            .equals(other.getServiceId())) return false;
+      }
+      if (!getPathHopsEndpointIdsList()
+          .equals(other.getPathHopsEndpointIdsList())) return false;
+      if (!getSubServiceIdsList()
+          .equals(other.getSubServiceIdsList())) return false;
+      if (hasSettings() != other.hasSettings()) return false;
+      if (hasSettings()) {
+        if (!getSettings()
+            .equals(other.getSettings())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasConnectionId()) {
+        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionId().hashCode();
+      }
+      if (hasServiceId()) {
+        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceId().hashCode();
+      }
+      if (getPathHopsEndpointIdsCount() > 0) {
+        hash = (37 * hash) + PATH_HOPS_ENDPOINT_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getPathHopsEndpointIdsList().hashCode();
+      }
+      if (getSubServiceIdsCount() > 0) {
+        hash = (37 * hash) + SUB_SERVICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getSubServiceIdsList().hashCode();
+      }
+      if (hasSettings()) {
+        hash = (37 * hash) + SETTINGS_FIELD_NUMBER;
+        hash = (53 * hash) + getSettings().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.Connection parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Connection parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Connection parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.Connection prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.Connection}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.Connection)
+        context.ContextOuterClass.ConnectionOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Connection_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Connection.class, context.ContextOuterClass.Connection.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Connection.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getPathHopsEndpointIdsFieldBuilder();
+          getSubServiceIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
+        } else {
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
+        }
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          pathHopsEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          pathHopsEndpointIdsBuilder_.clear();
+        }
+        if (subServiceIdsBuilder_ == null) {
+          subServiceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          subServiceIdsBuilder_.clear();
+        }
+        if (settingsBuilder_ == null) {
+          settings_ = null;
+        } else {
+          settings_ = null;
+          settingsBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Connection getDefaultInstanceForType() {
+        return context.ContextOuterClass.Connection.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Connection build() {
+        context.ContextOuterClass.Connection result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Connection buildPartial() {
+        context.ContextOuterClass.Connection result = new context.ContextOuterClass.Connection(this);
+        int from_bitField0_ = bitField0_;
+        if (connectionIdBuilder_ == null) {
+          result.connectionId_ = connectionId_;
+        } else {
+          result.connectionId_ = connectionIdBuilder_.build();
+        }
+        if (serviceIdBuilder_ == null) {
+          result.serviceId_ = serviceId_;
+        } else {
+          result.serviceId_ = serviceIdBuilder_.build();
+        }
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            pathHopsEndpointIds_ = java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.pathHopsEndpointIds_ = pathHopsEndpointIds_;
+        } else {
+          result.pathHopsEndpointIds_ = pathHopsEndpointIdsBuilder_.build();
+        }
+        if (subServiceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) != 0)) {
+            subServiceIds_ = java.util.Collections.unmodifiableList(subServiceIds_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.subServiceIds_ = subServiceIds_;
+        } else {
+          result.subServiceIds_ = subServiceIdsBuilder_.build();
+        }
+        if (settingsBuilder_ == null) {
+          result.settings_ = settings_;
+        } else {
+          result.settings_ = settingsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.Connection) {
+          return mergeFrom((context.ContextOuterClass.Connection)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.Connection other) {
+        if (other == context.ContextOuterClass.Connection.getDefaultInstance()) return this;
+        if (other.hasConnectionId()) {
+          mergeConnectionId(other.getConnectionId());
+        }
+        if (other.hasServiceId()) {
+          mergeServiceId(other.getServiceId());
+        }
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (!other.pathHopsEndpointIds_.isEmpty()) {
+            if (pathHopsEndpointIds_.isEmpty()) {
+              pathHopsEndpointIds_ = other.pathHopsEndpointIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensurePathHopsEndpointIdsIsMutable();
+              pathHopsEndpointIds_.addAll(other.pathHopsEndpointIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.pathHopsEndpointIds_.isEmpty()) {
+            if (pathHopsEndpointIdsBuilder_.isEmpty()) {
+              pathHopsEndpointIdsBuilder_.dispose();
+              pathHopsEndpointIdsBuilder_ = null;
+              pathHopsEndpointIds_ = other.pathHopsEndpointIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              pathHopsEndpointIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getPathHopsEndpointIdsFieldBuilder() : null;
+            } else {
+              pathHopsEndpointIdsBuilder_.addAllMessages(other.pathHopsEndpointIds_);
+            }
+          }
+        }
+        if (subServiceIdsBuilder_ == null) {
+          if (!other.subServiceIds_.isEmpty()) {
+            if (subServiceIds_.isEmpty()) {
+              subServiceIds_ = other.subServiceIds_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureSubServiceIdsIsMutable();
+              subServiceIds_.addAll(other.subServiceIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.subServiceIds_.isEmpty()) {
+            if (subServiceIdsBuilder_.isEmpty()) {
+              subServiceIdsBuilder_.dispose();
+              subServiceIdsBuilder_ = null;
+              subServiceIds_ = other.subServiceIds_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              subServiceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getSubServiceIdsFieldBuilder() : null;
+            } else {
+              subServiceIdsBuilder_.addAllMessages(other.subServiceIds_);
+            }
+          }
+        }
+        if (other.hasSettings()) {
+          mergeSettings(other.getSettings());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Connection parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Connection) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private context.ContextOuterClass.ConnectionId connectionId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdBuilder_;
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       * @return Whether the connectionId field is set.
+       */
+      public boolean hasConnectionId() {
+        return connectionIdBuilder_ != null || connectionId_ != null;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       * @return The connectionId.
+       */
+      public context.ContextOuterClass.ConnectionId getConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+        } else {
+          return connectionIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public Builder setConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          connectionId_ = value;
+          onChanged();
+        } else {
+          connectionIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public Builder setConnectionId(
+          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = builderForValue.build();
+          onChanged();
+        } else {
+          connectionIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
+          if (connectionId_ != null) {
+            connectionId_ =
+              context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
+          } else {
+            connectionId_ = value;
+          }
+          onChanged();
+        } else {
+          connectionIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public Builder clearConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
+          onChanged();
+        } else {
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
+        
+        onChanged();
+        return getConnectionIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+        if (connectionIdBuilder_ != null) {
+          return connectionIdBuilder_.getMessageOrBuilder();
+        } else {
+          return connectionId_ == null ?
+              context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+        }
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
+          getConnectionIdFieldBuilder() {
+        if (connectionIdBuilder_ == null) {
+          connectionIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
+                  getConnectionId(),
+                  getParentForChildren(),
+                  isClean());
+          connectionId_ = null;
+        }
+        return connectionIdBuilder_;
+      }
+
+      private context.ContextOuterClass.ServiceId serviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       * @return Whether the serviceId field is set.
+       */
+      public boolean hasServiceId() {
+        return serviceIdBuilder_ != null || serviceId_ != null;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       * @return The serviceId.
+       */
+      public context.ContextOuterClass.ServiceId getServiceId() {
+        if (serviceIdBuilder_ == null) {
+          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        } else {
+          return serviceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceId_ = value;
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public Builder setServiceId(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (serviceId_ != null) {
+            serviceId_ =
+              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
+          } else {
+            serviceId_ = value;
+          }
+          onChanged();
+        } else {
+          serviceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public Builder clearServiceId() {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+          onChanged();
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+        
+        onChanged();
+        return getServiceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+        if (serviceIdBuilder_ != null) {
+          return serviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdFieldBuilder() {
+        if (serviceIdBuilder_ == null) {
+          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  getServiceId(),
+                  getParentForChildren(),
+                  isClean());
+          serviceId_ = null;
+        }
+        return serviceIdBuilder_;
+      }
+
+      private java.util.List<context.ContextOuterClass.EndPointId> pathHopsEndpointIds_ =
+        java.util.Collections.emptyList();
+      private void ensurePathHopsEndpointIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          pathHopsEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(pathHopsEndpointIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> pathHopsEndpointIdsBuilder_;
+
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId> getPathHopsEndpointIdsList() {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+        } else {
+          return pathHopsEndpointIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public int getPathHopsEndpointIdsCount() {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          return pathHopsEndpointIds_.size();
+        } else {
+          return pathHopsEndpointIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          return pathHopsEndpointIds_.get(index);
+        } else {
+          return pathHopsEndpointIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder setPathHopsEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.set(index, value);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder setPathHopsEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addPathHopsEndpointIds(context.ContextOuterClass.EndPointId value) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.add(value);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addPathHopsEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.add(index, value);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addPathHopsEndpointIds(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addPathHopsEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addAllPathHopsEndpointIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, pathHopsEndpointIds_);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder clearPathHopsEndpointIds() {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          pathHopsEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder removePathHopsEndpointIds(int index) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.remove(index);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getPathHopsEndpointIdsBuilder(
+          int index) {
+        return getPathHopsEndpointIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
+          int index) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          return pathHopsEndpointIds_.get(index);  } else {
+          return pathHopsEndpointIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+           getPathHopsEndpointIdsOrBuilderList() {
+        if (pathHopsEndpointIdsBuilder_ != null) {
+          return pathHopsEndpointIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addPathHopsEndpointIdsBuilder() {
+        return getPathHopsEndpointIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addPathHopsEndpointIdsBuilder(
+          int index) {
+        return getPathHopsEndpointIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
+           getPathHopsEndpointIdsBuilderList() {
+        return getPathHopsEndpointIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getPathHopsEndpointIdsFieldBuilder() {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          pathHopsEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  pathHopsEndpointIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          pathHopsEndpointIds_ = null;
+        }
+        return pathHopsEndpointIdsBuilder_;
+      }
+
+      private java.util.List<context.ContextOuterClass.ServiceId> subServiceIds_ =
+        java.util.Collections.emptyList();
+      private void ensureSubServiceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          subServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(subServiceIds_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> subServiceIdsBuilder_;
+
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ServiceId> getSubServiceIdsList() {
+        if (subServiceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(subServiceIds_);
+        } else {
+          return subServiceIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public int getSubServiceIdsCount() {
+        if (subServiceIdsBuilder_ == null) {
+          return subServiceIds_.size();
+        } else {
+          return subServiceIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public context.ContextOuterClass.ServiceId getSubServiceIds(int index) {
+        if (subServiceIdsBuilder_ == null) {
+          return subServiceIds_.get(index);
+        } else {
+          return subServiceIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder setSubServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (subServiceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.set(index, value);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder setSubServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder addSubServiceIds(context.ContextOuterClass.ServiceId value) {
+        if (subServiceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.add(value);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder addSubServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (subServiceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.add(index, value);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder addSubServiceIds(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder addSubServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder addAllSubServiceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, subServiceIds_);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder clearSubServiceIds() {
+        if (subServiceIdsBuilder_ == null) {
+          subServiceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder removeSubServiceIds(int index) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.remove(index);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getSubServiceIdsBuilder(
+          int index) {
+        return getSubServiceIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
+          int index) {
+        if (subServiceIdsBuilder_ == null) {
+          return subServiceIds_.get(index);  } else {
+          return subServiceIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+           getSubServiceIdsOrBuilderList() {
+        if (subServiceIdsBuilder_ != null) {
+          return subServiceIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(subServiceIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder addSubServiceIdsBuilder() {
+        return getSubServiceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ServiceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder addSubServiceIdsBuilder(
+          int index) {
+        return getSubServiceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
+           getSubServiceIdsBuilderList() {
+        return getSubServiceIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getSubServiceIdsFieldBuilder() {
+        if (subServiceIdsBuilder_ == null) {
+          subServiceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  subServiceIds_,
+                  ((bitField0_ & 0x00000002) != 0),
+                  getParentForChildren(),
+                  isClean());
+          subServiceIds_ = null;
+        }
+        return subServiceIdsBuilder_;
+      }
+
+      private context.ContextOuterClass.ConnectionSettings settings_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings, context.ContextOuterClass.ConnectionSettings.Builder, context.ContextOuterClass.ConnectionSettingsOrBuilder> settingsBuilder_;
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       * @return Whether the settings field is set.
+       */
+      public boolean hasSettings() {
+        return settingsBuilder_ != null || settings_ != null;
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       * @return The settings.
+       */
+      public context.ContextOuterClass.ConnectionSettings getSettings() {
+        if (settingsBuilder_ == null) {
+          return settings_ == null ? context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
+        } else {
+          return settingsBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      public Builder setSettings(context.ContextOuterClass.ConnectionSettings value) {
+        if (settingsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          settings_ = value;
+          onChanged();
+        } else {
+          settingsBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      public Builder setSettings(
+          context.ContextOuterClass.ConnectionSettings.Builder builderForValue) {
+        if (settingsBuilder_ == null) {
+          settings_ = builderForValue.build();
+          onChanged();
+        } else {
+          settingsBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      public Builder mergeSettings(context.ContextOuterClass.ConnectionSettings value) {
+        if (settingsBuilder_ == null) {
+          if (settings_ != null) {
+            settings_ =
+              context.ContextOuterClass.ConnectionSettings.newBuilder(settings_).mergeFrom(value).buildPartial();
+          } else {
+            settings_ = value;
+          }
+          onChanged();
+        } else {
+          settingsBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      public Builder clearSettings() {
+        if (settingsBuilder_ == null) {
+          settings_ = null;
+          onChanged();
+        } else {
+          settings_ = null;
+          settingsBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      public context.ContextOuterClass.ConnectionSettings.Builder getSettingsBuilder() {
+        
+        onChanged();
+        return getSettingsFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      public context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder() {
+        if (settingsBuilder_ != null) {
+          return settingsBuilder_.getMessageOrBuilder();
+        } else {
+          return settings_ == null ?
+              context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
+        }
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings, context.ContextOuterClass.ConnectionSettings.Builder, context.ContextOuterClass.ConnectionSettingsOrBuilder> 
+          getSettingsFieldBuilder() {
+        if (settingsBuilder_ == null) {
+          settingsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionSettings, context.ContextOuterClass.ConnectionSettings.Builder, context.ContextOuterClass.ConnectionSettingsOrBuilder>(
+                  getSettings(),
+                  getParentForChildren(),
+                  isClean());
+          settings_ = null;
+        }
+        return settingsBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.Connection)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Connection)
+    private static final context.ContextOuterClass.Connection DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Connection();
+    }
+
+    public static context.ContextOuterClass.Connection getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Connection>
+        PARSER = new com.google.protobuf.AbstractParser<Connection>() {
+      @java.lang.Override
+      public Connection parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Connection(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Connection> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Connection> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Connection getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ConnectionIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionIdList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.ConnectionId> 
+        getConnectionIdsList();
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    context.ContextOuterClass.ConnectionId getConnectionIds(int index);
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    int getConnectionIdsCount();
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
+        getConnectionIdsOrBuilderList();
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.ConnectionIdList}
+   */
+  public static final class ConnectionIdList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ConnectionIdList)
+      ConnectionIdListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ConnectionIdList.newBuilder() to construct.
+    private ConnectionIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ConnectionIdList() {
+      connectionIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ConnectionIdList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ConnectionIdList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                connectionIds_ = new java.util.ArrayList<context.ContextOuterClass.ConnectionId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              connectionIds_.add(
+                  input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
+    }
+
+    public static final int CONNECTION_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_;
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
+      return connectionIds_;
+    }
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
+        getConnectionIdsOrBuilderList() {
+      return connectionIds_;
+    }
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public int getConnectionIdsCount() {
+      return connectionIds_.size();
+    }
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
+      return connectionIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+        int index) {
+      return connectionIds_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < connectionIds_.size(); i++) {
+        output.writeMessage(1, connectionIds_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < connectionIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, connectionIds_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.ConnectionIdList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ConnectionIdList other = (context.ContextOuterClass.ConnectionIdList) obj;
+
+      if (!getConnectionIdsList()
+          .equals(other.getConnectionIdsList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getConnectionIdsCount() > 0) {
+        hash = (37 * hash) + CONNECTION_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionIdsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionIdList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.ConnectionIdList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ConnectionIdList)
+        context.ContextOuterClass.ConnectionIdListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ConnectionIdList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getConnectionIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (connectionIdsBuilder_ == null) {
+          connectionIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          connectionIdsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionIdList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionIdList build() {
+        context.ContextOuterClass.ConnectionIdList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionIdList buildPartial() {
+        context.ContextOuterClass.ConnectionIdList result = new context.ContextOuterClass.ConnectionIdList(this);
+        int from_bitField0_ = bitField0_;
+        if (connectionIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.connectionIds_ = connectionIds_;
+        } else {
+          result.connectionIds_ = connectionIdsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ConnectionIdList) {
+          return mergeFrom((context.ContextOuterClass.ConnectionIdList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionIdList other) {
+        if (other == context.ContextOuterClass.ConnectionIdList.getDefaultInstance()) return this;
+        if (connectionIdsBuilder_ == null) {
+          if (!other.connectionIds_.isEmpty()) {
+            if (connectionIds_.isEmpty()) {
+              connectionIds_ = other.connectionIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureConnectionIdsIsMutable();
+              connectionIds_.addAll(other.connectionIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.connectionIds_.isEmpty()) {
+            if (connectionIdsBuilder_.isEmpty()) {
+              connectionIdsBuilder_.dispose();
+              connectionIdsBuilder_ = null;
+              connectionIds_ = other.connectionIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              connectionIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getConnectionIdsFieldBuilder() : null;
+            } else {
+              connectionIdsBuilder_.addAllMessages(other.connectionIds_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ConnectionIdList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ConnectionIdList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
         }
-        return pathHopsEndpointIdsBuilder_;
+        return this;
       }
+      private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.ServiceId> subServiceIds_ =
+      private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_ =
         java.util.Collections.emptyList();
-      private void ensureSubServiceIdsIsMutable() {
-        if (!((bitField0_ & 0x00000002) != 0)) {
-          subServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(subServiceIds_);
-          bitField0_ |= 0x00000002;
+      private void ensureConnectionIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          connectionIds_ = new java.util.ArrayList<context.ContextOuterClass.ConnectionId>(connectionIds_);
+          bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> subServiceIdsBuilder_;
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdsBuilder_;
 
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.ServiceId> getSubServiceIdsList() {
-        if (subServiceIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(subServiceIds_);
+      public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
+        if (connectionIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(connectionIds_);
         } else {
-          return subServiceIdsBuilder_.getMessageList();
+          return connectionIdsBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public int getSubServiceIdsCount() {
-        if (subServiceIdsBuilder_ == null) {
-          return subServiceIds_.size();
+      public int getConnectionIdsCount() {
+        if (connectionIdsBuilder_ == null) {
+          return connectionIds_.size();
         } else {
-          return subServiceIdsBuilder_.getCount();
+          return connectionIdsBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public context.ContextOuterClass.ServiceId getSubServiceIds(int index) {
-        if (subServiceIdsBuilder_ == null) {
-          return subServiceIds_.get(index);
+      public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
+        if (connectionIdsBuilder_ == null) {
+          return connectionIds_.get(index);
         } else {
-          return subServiceIdsBuilder_.getMessage(index);
+          return connectionIdsBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder setSubServiceIds(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (subServiceIdsBuilder_ == null) {
+      public Builder setConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.set(index, value);
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public Builder setSubServiceIds(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (subServiceIdsBuilder_ == null) {
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.set(index, builderForValue.build());
+          ensureConnectionIdsIsMutable();
+          connectionIds_.set(index, value);
           onChanged();
         } else {
-          subServiceIdsBuilder_.setMessage(index, builderForValue.build());
+          connectionIdsBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder addSubServiceIds(context.ContextOuterClass.ServiceId value) {
-        if (subServiceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.add(value);
+      public Builder setConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.set(index, builderForValue.build());
           onChanged();
         } else {
-          subServiceIdsBuilder_.addMessage(value);
+          connectionIdsBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder addSubServiceIds(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (subServiceIdsBuilder_ == null) {
+      public Builder addConnectionIds(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.add(index, value);
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.addMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public Builder addSubServiceIds(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (subServiceIdsBuilder_ == null) {
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.add(builderForValue.build());
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public Builder addSubServiceIds(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (subServiceIdsBuilder_ == null) {
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public Builder addAllSubServiceIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
-        if (subServiceIdsBuilder_ == null) {
-          ensureSubServiceIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, subServiceIds_);
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.addAllMessages(values);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public Builder clearSubServiceIds() {
-        if (subServiceIdsBuilder_ == null) {
-          subServiceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.clear();
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public Builder removeSubServiceIds(int index) {
-        if (subServiceIdsBuilder_ == null) {
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.remove(index);
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.remove(index);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder getSubServiceIdsBuilder(
-          int index) {
-        return getSubServiceIdsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
-          int index) {
-        if (subServiceIdsBuilder_ == null) {
-          return subServiceIds_.get(index);  } else {
-          return subServiceIdsBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-           getSubServiceIdsOrBuilderList() {
-        if (subServiceIdsBuilder_ != null) {
-          return subServiceIdsBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(subServiceIds_);
-        }
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder addSubServiceIdsBuilder() {
-        return getSubServiceIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.ServiceId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder addSubServiceIdsBuilder(
-          int index) {
-        return getSubServiceIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
-           getSubServiceIdsBuilderList() {
-        return getSubServiceIdsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getSubServiceIdsFieldBuilder() {
-        if (subServiceIdsBuilder_ == null) {
-          subServiceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  subServiceIds_,
-                  ((bitField0_ & 0x00000002) != 0),
-                  getParentForChildren(),
-                  isClean());
-          subServiceIds_ = null;
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(value);
+          onChanged();
+        } else {
+          connectionIdsBuilder_.addMessage(value);
         }
-        return subServiceIdsBuilder_;
+        return this;
       }
-
-      private context.ContextOuterClass.ConnectionSettings settings_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings, context.ContextOuterClass.ConnectionSettings.Builder, context.ContextOuterClass.ConnectionSettingsOrBuilder> settingsBuilder_;
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
-       * @return Whether the settings field is set.
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public boolean hasSettings() {
-        return settingsBuilder_ != null || settings_ != null;
+      public Builder addConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(index, value);
+          onChanged();
+        } else {
+          connectionIdsBuilder_.addMessage(index, value);
+        }
+        return this;
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
-       * @return The settings.
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionSettings getSettings() {
-        if (settingsBuilder_ == null) {
-          return settings_ == null ? context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
+      public Builder addConnectionIds(
+          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(builderForValue.build());
+          onChanged();
         } else {
-          return settingsBuilder_.getMessage();
+          connectionIdsBuilder_.addMessage(builderForValue.build());
         }
+        return this;
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder setSettings(context.ContextOuterClass.ConnectionSettings value) {
-        if (settingsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          settings_ = value;
+      public Builder addConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(index, builderForValue.build());
           onChanged();
         } else {
-          settingsBuilder_.setMessage(value);
+          connectionIdsBuilder_.addMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder setSettings(
-          context.ContextOuterClass.ConnectionSettings.Builder builderForValue) {
-        if (settingsBuilder_ == null) {
-          settings_ = builderForValue.build();
+      public Builder addAllConnectionIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.ConnectionId> values) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, connectionIds_);
           onChanged();
         } else {
-          settingsBuilder_.setMessage(builderForValue.build());
+          connectionIdsBuilder_.addAllMessages(values);
         }
-
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder mergeSettings(context.ContextOuterClass.ConnectionSettings value) {
-        if (settingsBuilder_ == null) {
-          if (settings_ != null) {
-            settings_ =
-              context.ContextOuterClass.ConnectionSettings.newBuilder(settings_).mergeFrom(value).buildPartial();
-          } else {
-            settings_ = value;
-          }
+      public Builder clearConnectionIds() {
+        if (connectionIdsBuilder_ == null) {
+          connectionIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          settingsBuilder_.mergeFrom(value);
+          connectionIdsBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder clearSettings() {
-        if (settingsBuilder_ == null) {
-          settings_ = null;
+      public Builder removeConnectionIds(int index) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.remove(index);
           onChanged();
         } else {
-          settings_ = null;
-          settingsBuilder_ = null;
+          connectionIdsBuilder_.remove(index);
         }
-
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionSettings.Builder getSettingsBuilder() {
-        
-        onChanged();
-        return getSettingsFieldBuilder().getBuilder();
+      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdsBuilder(
+          int index) {
+        return getConnectionIdsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder() {
-        if (settingsBuilder_ != null) {
-          return settingsBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+          int index) {
+        if (connectionIdsBuilder_ == null) {
+          return connectionIds_.get(index);  } else {
+          return connectionIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
+           getConnectionIdsOrBuilderList() {
+        if (connectionIdsBuilder_ != null) {
+          return connectionIdsBuilder_.getMessageOrBuilderList();
         } else {
-          return settings_ == null ?
-              context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
+          return java.util.Collections.unmodifiableList(connectionIds_);
         }
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings, context.ContextOuterClass.ConnectionSettings.Builder, context.ContextOuterClass.ConnectionSettingsOrBuilder> 
-          getSettingsFieldBuilder() {
-        if (settingsBuilder_ == null) {
-          settingsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionSettings, context.ContextOuterClass.ConnectionSettings.Builder, context.ContextOuterClass.ConnectionSettingsOrBuilder>(
-                  getSettings(),
+      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder() {
+        return getConnectionIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ConnectionId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder(
+          int index) {
+        return getConnectionIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ConnectionId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ConnectionId.Builder> 
+           getConnectionIdsBuilderList() {
+        return getConnectionIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
+          getConnectionIdsFieldBuilder() {
+        if (connectionIdsBuilder_ == null) {
+          connectionIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
+                  connectionIds_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          settings_ = null;
+          connectionIds_ = null;
         }
-        return settingsBuilder_;
+        return connectionIdsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -42845,95 +44634,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Connection)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionIdList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Connection)
-    private static final context.ContextOuterClass.Connection DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionIdList)
+    private static final context.ContextOuterClass.ConnectionIdList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Connection();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionIdList();
     }
 
-    public static context.ContextOuterClass.Connection getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionIdList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Connection>
-        PARSER = new com.google.protobuf.AbstractParser<Connection>() {
+    private static final com.google.protobuf.Parser<ConnectionIdList>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionIdList>() {
       @java.lang.Override
-      public Connection parsePartialFrom(
+      public ConnectionIdList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Connection(input, extensionRegistry);
+        return new ConnectionIdList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Connection> parser() {
+    public static com.google.protobuf.Parser<ConnectionIdList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Connection> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionIdList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Connection getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionIdListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionIdList)
+  public interface ConnectionListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
-    java.util.List<context.ContextOuterClass.ConnectionId> 
-        getConnectionIdsList();
+    java.util.List<context.ContextOuterClass.Connection> 
+        getConnectionsList();
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
-    context.ContextOuterClass.ConnectionId getConnectionIds(int index);
+    context.ContextOuterClass.Connection getConnections(int index);
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
-    int getConnectionIdsCount();
+    int getConnectionsCount();
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
-    java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
-        getConnectionIdsOrBuilderList();
+    java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
+        getConnectionsOrBuilderList();
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
-    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+    context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
         int index);
   }
   /**
-   * Protobuf type {@code context.ConnectionIdList}
+   * Protobuf type {@code context.ConnectionList}
    */
-  public static final class ConnectionIdList extends
+  public static final class ConnectionList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionIdList)
-      ConnectionIdListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionList)
+      ConnectionListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionIdList.newBuilder() to construct.
-    private ConnectionIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionList.newBuilder() to construct.
+    private ConnectionList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionIdList() {
-      connectionIds_ = java.util.Collections.emptyList();
+    private ConnectionList() {
+      connections_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionIdList();
+      return new ConnectionList();
     }
 
     @java.lang.Override
@@ -42941,7 +44730,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionIdList(
+    private ConnectionList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -42962,11 +44751,11 @@ public final class ContextOuterClass {
               break;
             case 10: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                connectionIds_ = new java.util.ArrayList<context.ContextOuterClass.ConnectionId>();
+                connections_ = new java.util.ArrayList<context.ContextOuterClass.Connection>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              connectionIds_.add(
-                  input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry));
+              connections_.add(
+                  input.readMessage(context.ContextOuterClass.Connection.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -42985,7 +44774,7 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
+          connections_ = java.util.Collections.unmodifiableList(connections_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -42993,55 +44782,55 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
+              context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
     }
 
-    public static final int CONNECTION_IDS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_;
+    public static final int CONNECTIONS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Connection> connections_;
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
-      return connectionIds_;
+    public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
+      return connections_;
     }
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
-        getConnectionIdsOrBuilderList() {
-      return connectionIds_;
+    public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
+        getConnectionsOrBuilderList() {
+      return connections_;
     }
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public int getConnectionIdsCount() {
-      return connectionIds_.size();
+    public int getConnectionsCount() {
+      return connections_.size();
     }
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
-      return connectionIds_.get(index);
+    public context.ContextOuterClass.Connection getConnections(int index) {
+      return connections_.get(index);
     }
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+    public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
         int index) {
-      return connectionIds_.get(index);
+      return connections_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -43058,8 +44847,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < connectionIds_.size(); i++) {
-        output.writeMessage(1, connectionIds_.get(i));
+      for (int i = 0; i < connections_.size(); i++) {
+        output.writeMessage(1, connections_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -43070,9 +44859,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < connectionIds_.size(); i++) {
+      for (int i = 0; i < connections_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, connectionIds_.get(i));
+          .computeMessageSize(1, connections_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -43084,13 +44873,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionIdList)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionIdList other = (context.ContextOuterClass.ConnectionIdList) obj;
+      context.ContextOuterClass.ConnectionList other = (context.ContextOuterClass.ConnectionList) obj;
 
-      if (!getConnectionIdsList()
-          .equals(other.getConnectionIdsList())) return false;
+      if (!getConnectionsList()
+          .equals(other.getConnectionsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -43102,78 +44891,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getConnectionIdsCount() > 0) {
-        hash = (37 * hash) + CONNECTION_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionIdsList().hashCode();
+      if (getConnectionsCount() > 0) {
+        hash = (37 * hash) + CONNECTIONS_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionsList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -43186,7 +44975,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionIdList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -43202,26 +44991,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionIdList}
+     * Protobuf type {@code context.ConnectionList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionIdList)
-        context.ContextOuterClass.ConnectionIdListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionList)
+        context.ContextOuterClass.ConnectionListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
+                context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionIdList.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -43234,17 +45023,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getConnectionIdsFieldBuilder();
+          getConnectionsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (connectionIdsBuilder_ == null) {
-          connectionIds_ = java.util.Collections.emptyList();
+        if (connectionsBuilder_ == null) {
+          connections_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          connectionIdsBuilder_.clear();
+          connectionsBuilder_.clear();
         }
         return this;
       }
@@ -43252,17 +45041,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionIdList.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionIdList build() {
-        context.ContextOuterClass.ConnectionIdList result = buildPartial();
+      public context.ContextOuterClass.ConnectionList build() {
+        context.ContextOuterClass.ConnectionList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -43270,17 +45059,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionIdList buildPartial() {
-        context.ContextOuterClass.ConnectionIdList result = new context.ContextOuterClass.ConnectionIdList(this);
+      public context.ContextOuterClass.ConnectionList buildPartial() {
+        context.ContextOuterClass.ConnectionList result = new context.ContextOuterClass.ConnectionList(this);
         int from_bitField0_ = bitField0_;
-        if (connectionIdsBuilder_ == null) {
+        if (connectionsBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
+            connections_ = java.util.Collections.unmodifiableList(connections_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.connectionIds_ = connectionIds_;
+          result.connections_ = connections_;
         } else {
-          result.connectionIds_ = connectionIdsBuilder_.build();
+          result.connections_ = connectionsBuilder_.build();
         }
         onBuilt();
         return result;
@@ -43320,39 +45109,39 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionIdList) {
-          return mergeFrom((context.ContextOuterClass.ConnectionIdList)other);
+        if (other instanceof context.ContextOuterClass.ConnectionList) {
+          return mergeFrom((context.ContextOuterClass.ConnectionList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionIdList other) {
-        if (other == context.ContextOuterClass.ConnectionIdList.getDefaultInstance()) return this;
-        if (connectionIdsBuilder_ == null) {
-          if (!other.connectionIds_.isEmpty()) {
-            if (connectionIds_.isEmpty()) {
-              connectionIds_ = other.connectionIds_;
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionList other) {
+        if (other == context.ContextOuterClass.ConnectionList.getDefaultInstance()) return this;
+        if (connectionsBuilder_ == null) {
+          if (!other.connections_.isEmpty()) {
+            if (connections_.isEmpty()) {
+              connections_ = other.connections_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureConnectionIdsIsMutable();
-              connectionIds_.addAll(other.connectionIds_);
+              ensureConnectionsIsMutable();
+              connections_.addAll(other.connections_);
             }
             onChanged();
           }
         } else {
-          if (!other.connectionIds_.isEmpty()) {
-            if (connectionIdsBuilder_.isEmpty()) {
-              connectionIdsBuilder_.dispose();
-              connectionIdsBuilder_ = null;
-              connectionIds_ = other.connectionIds_;
+          if (!other.connections_.isEmpty()) {
+            if (connectionsBuilder_.isEmpty()) {
+              connectionsBuilder_.dispose();
+              connectionsBuilder_ = null;
+              connections_ = other.connections_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              connectionIdsBuilder_ = 
+              connectionsBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getConnectionIdsFieldBuilder() : null;
+                   getConnectionsFieldBuilder() : null;
             } else {
-              connectionIdsBuilder_.addAllMessages(other.connectionIds_);
+              connectionsBuilder_.addAllMessages(other.connections_);
             }
           }
         }
@@ -43371,11 +45160,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionIdList parsedMessage = null;
+        context.ContextOuterClass.ConnectionList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionIdList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -43386,244 +45175,244 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_ =
+      private java.util.List<context.ContextOuterClass.Connection> connections_ =
         java.util.Collections.emptyList();
-      private void ensureConnectionIdsIsMutable() {
+      private void ensureConnectionsIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          connectionIds_ = new java.util.ArrayList<context.ContextOuterClass.ConnectionId>(connectionIds_);
+          connections_ = new java.util.ArrayList<context.ContextOuterClass.Connection>(connections_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdsBuilder_;
+          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> connectionsBuilder_;
 
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
-        if (connectionIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(connectionIds_);
+      public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
+        if (connectionsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(connections_);
         } else {
-          return connectionIdsBuilder_.getMessageList();
+          return connectionsBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public int getConnectionIdsCount() {
-        if (connectionIdsBuilder_ == null) {
-          return connectionIds_.size();
+      public int getConnectionsCount() {
+        if (connectionsBuilder_ == null) {
+          return connections_.size();
         } else {
-          return connectionIdsBuilder_.getCount();
+          return connectionsBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
-        if (connectionIdsBuilder_ == null) {
-          return connectionIds_.get(index);
+      public context.ContextOuterClass.Connection getConnections(int index) {
+        if (connectionsBuilder_ == null) {
+          return connections_.get(index);
         } else {
-          return connectionIdsBuilder_.getMessage(index);
+          return connectionsBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder setConnectionIds(
-          int index, context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdsBuilder_ == null) {
+      public Builder setConnections(
+          int index, context.ContextOuterClass.Connection value) {
+        if (connectionsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureConnectionIdsIsMutable();
-          connectionIds_.set(index, value);
+          ensureConnectionsIsMutable();
+          connections_.set(index, value);
           onChanged();
         } else {
-          connectionIdsBuilder_.setMessage(index, value);
+          connectionsBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder setConnectionIds(
-          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          connectionIds_.set(index, builderForValue.build());
+      public Builder setConnections(
+          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.set(index, builderForValue.build());
           onChanged();
         } else {
-          connectionIdsBuilder_.setMessage(index, builderForValue.build());
+          connectionsBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder addConnectionIds(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdsBuilder_ == null) {
+      public Builder addConnections(context.ContextOuterClass.Connection value) {
+        if (connectionsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureConnectionIdsIsMutable();
-          connectionIds_.add(value);
+          ensureConnectionsIsMutable();
+          connections_.add(value);
           onChanged();
         } else {
-          connectionIdsBuilder_.addMessage(value);
+          connectionsBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
-       */
-      public Builder addConnectionIds(
-          int index, context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdsBuilder_ == null) {
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public Builder addConnections(
+          int index, context.ContextOuterClass.Connection value) {
+        if (connectionsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureConnectionIdsIsMutable();
-          connectionIds_.add(index, value);
+          ensureConnectionsIsMutable();
+          connections_.add(index, value);
           onChanged();
         } else {
-          connectionIdsBuilder_.addMessage(index, value);
+          connectionsBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder addConnectionIds(
-          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          connectionIds_.add(builderForValue.build());
+      public Builder addConnections(
+          context.ContextOuterClass.Connection.Builder builderForValue) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.add(builderForValue.build());
           onChanged();
         } else {
-          connectionIdsBuilder_.addMessage(builderForValue.build());
+          connectionsBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder addConnectionIds(
-          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          connectionIds_.add(index, builderForValue.build());
+      public Builder addConnections(
+          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.add(index, builderForValue.build());
           onChanged();
         } else {
-          connectionIdsBuilder_.addMessage(index, builderForValue.build());
+          connectionsBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder addAllConnectionIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.ConnectionId> values) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
+      public Builder addAllConnections(
+          java.lang.Iterable<? extends context.ContextOuterClass.Connection> values) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, connectionIds_);
+              values, connections_);
           onChanged();
         } else {
-          connectionIdsBuilder_.addAllMessages(values);
+          connectionsBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder clearConnectionIds() {
-        if (connectionIdsBuilder_ == null) {
-          connectionIds_ = java.util.Collections.emptyList();
+      public Builder clearConnections() {
+        if (connectionsBuilder_ == null) {
+          connections_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          connectionIdsBuilder_.clear();
+          connectionsBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder removeConnectionIds(int index) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          connectionIds_.remove(index);
+      public Builder removeConnections(int index) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.remove(index);
           onChanged();
         } else {
-          connectionIdsBuilder_.remove(index);
+          connectionsBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdsBuilder(
+      public context.ContextOuterClass.Connection.Builder getConnectionsBuilder(
           int index) {
-        return getConnectionIdsFieldBuilder().getBuilder(index);
+        return getConnectionsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+      public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
           int index) {
-        if (connectionIdsBuilder_ == null) {
-          return connectionIds_.get(index);  } else {
-          return connectionIdsBuilder_.getMessageOrBuilder(index);
+        if (connectionsBuilder_ == null) {
+          return connections_.get(index);  } else {
+          return connectionsBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
-           getConnectionIdsOrBuilderList() {
-        if (connectionIdsBuilder_ != null) {
-          return connectionIdsBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
+           getConnectionsOrBuilderList() {
+        if (connectionsBuilder_ != null) {
+          return connectionsBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(connectionIds_);
+          return java.util.Collections.unmodifiableList(connections_);
         }
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder() {
-        return getConnectionIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.ConnectionId.getDefaultInstance());
+      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder() {
+        return getConnectionsFieldBuilder().addBuilder(
+            context.ContextOuterClass.Connection.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder(
+      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder(
           int index) {
-        return getConnectionIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ConnectionId.getDefaultInstance());
+        return getConnectionsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Connection.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.ConnectionId.Builder> 
-           getConnectionIdsBuilderList() {
-        return getConnectionIdsFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.Connection.Builder> 
+           getConnectionsBuilderList() {
+        return getConnectionsFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
-          getConnectionIdsFieldBuilder() {
-        if (connectionIdsBuilder_ == null) {
-          connectionIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
-                  connectionIds_,
+          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> 
+          getConnectionsFieldBuilder() {
+        if (connectionsBuilder_ == null) {
+          connectionsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder>(
+                  connections_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          connectionIds_ = null;
+          connections_ = null;
         }
-        return connectionIdsBuilder_;
+        return connectionsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -43638,95 +45427,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionIdList)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionIdList)
-    private static final context.ContextOuterClass.ConnectionIdList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionList)
+    private static final context.ContextOuterClass.ConnectionList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionIdList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionList();
     }
 
-    public static context.ContextOuterClass.ConnectionIdList getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionIdList>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionIdList>() {
+    private static final com.google.protobuf.Parser<ConnectionList>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionList>() {
       @java.lang.Override
-      public ConnectionIdList parsePartialFrom(
+      public ConnectionList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionIdList(input, extensionRegistry);
+        return new ConnectionList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionIdList> parser() {
+    public static com.google.protobuf.Parser<ConnectionList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionIdList> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionList)
+  public interface ConnectionEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionEvent)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
-    java.util.List<context.ContextOuterClass.Connection> 
-        getConnectionsList();
+    boolean hasEvent();
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
-    context.ContextOuterClass.Connection getConnections(int index);
+    context.ContextOuterClass.Event getEvent();
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.Event event = 1;</code>
      */
-    int getConnectionsCount();
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     * @return Whether the connectionId field is set.
      */
-    java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
-        getConnectionsOrBuilderList();
+    boolean hasConnectionId();
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     * @return The connectionId.
      */
-    context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
-        int index);
+    context.ContextOuterClass.ConnectionId getConnectionId();
+    /**
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     */
+    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
   }
   /**
-   * Protobuf type {@code context.ConnectionList}
+   * Protobuf type {@code context.ConnectionEvent}
    */
-  public static final class ConnectionList extends
+  public static final class ConnectionEvent extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionList)
-      ConnectionListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionEvent)
+      ConnectionEventOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionList.newBuilder() to construct.
-    private ConnectionList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionEvent.newBuilder() to construct.
+    private ConnectionEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionList() {
-      connections_ = java.util.Collections.emptyList();
+    private ConnectionEvent() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionList();
+      return new ConnectionEvent();
     }
 
     @java.lang.Override
@@ -43734,7 +45528,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionList(
+    private ConnectionEvent(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -43742,7 +45536,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -43754,12 +45547,29 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                connections_ = new java.util.ArrayList<context.ContextOuterClass.Connection>();
-                mutable_bitField0_ |= 0x00000001;
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
               }
-              connections_.add(
-                  input.readMessage(context.ContextOuterClass.Connection.parser(), extensionRegistry));
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.ConnectionId.Builder subBuilder = null;
+              if (connectionId_ != null) {
+                subBuilder = connectionId_.toBuilder();
+              }
+              connectionId_ = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(connectionId_);
+                connectionId_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -43777,64 +45587,73 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          connections_ = java.util.Collections.unmodifiableList(connections_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionEvent_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
+              context.ContextOuterClass.ConnectionEvent.class, context.ContextOuterClass.ConnectionEvent.Builder.class);
     }
 
-    public static final int CONNECTIONS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.Connection> connections_;
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
-      return connections_;
+    public boolean hasEvent() {
+      return event_ != null;
     }
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
-        getConnectionsOrBuilderList() {
-      return connections_;
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
     }
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.Event event = 1;</code>
      */
     @java.lang.Override
-    public int getConnectionsCount() {
-      return connections_.size();
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
     }
+
+    public static final int CONNECTION_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ConnectionId connectionId_;
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     * @return Whether the connectionId field is set.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Connection getConnections(int index) {
-      return connections_.get(index);
+    public boolean hasConnectionId() {
+      return connectionId_ != null;
     }
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     * @return The connectionId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
-        int index) {
-      return connections_.get(index);
+    public context.ContextOuterClass.ConnectionId getConnectionId() {
+      return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+    }
+    /**
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+      return getConnectionId();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -43851,8 +45670,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < connections_.size(); i++) {
-        output.writeMessage(1, connections_.get(i));
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
+      }
+      if (connectionId_ != null) {
+        output.writeMessage(2, getConnectionId());
       }
       unknownFields.writeTo(output);
     }
@@ -43863,9 +45685,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < connections_.size(); i++) {
+      if (event_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, connections_.get(i));
+          .computeMessageSize(1, getEvent());
+      }
+      if (connectionId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getConnectionId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -43877,13 +45703,21 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionList)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionEvent)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionList other = (context.ContextOuterClass.ConnectionList) obj;
+      context.ContextOuterClass.ConnectionEvent other = (context.ContextOuterClass.ConnectionEvent) obj;
 
-      if (!getConnectionsList()
-          .equals(other.getConnectionsList())) return false;
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
+      }
+      if (hasConnectionId() != other.hasConnectionId()) return false;
+      if (hasConnectionId()) {
+        if (!getConnectionId()
+            .equals(other.getConnectionId())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -43895,78 +45729,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getConnectionsCount() > 0) {
-        hash = (37 * hash) + CONNECTIONS_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionsList().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
+      }
+      if (hasConnectionId()) {
+        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionId().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionEvent parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionList parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -43979,7 +45817,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionEvent prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -43995,26 +45833,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionList}
+     * Protobuf type {@code context.ConnectionEvent}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionList)
-        context.ContextOuterClass.ConnectionListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionEvent)
+        context.ContextOuterClass.ConnectionEventOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionEvent_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
+                context.ContextOuterClass.ConnectionEvent.class, context.ContextOuterClass.ConnectionEvent.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionList.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionEvent.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -44027,17 +45865,22 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getConnectionsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (connectionsBuilder_ == null) {
-          connections_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (eventBuilder_ == null) {
+          event_ = null;
         } else {
-          connectionsBuilder_.clear();
+          event_ = null;
+          eventBuilder_ = null;
+        }
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
+        } else {
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
         }
         return this;
       }
@@ -44045,17 +45888,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionList.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionEvent.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionList build() {
-        context.ContextOuterClass.ConnectionList result = buildPartial();
+      public context.ContextOuterClass.ConnectionEvent build() {
+        context.ContextOuterClass.ConnectionEvent result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -44063,17 +45906,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionList buildPartial() {
-        context.ContextOuterClass.ConnectionList result = new context.ContextOuterClass.ConnectionList(this);
-        int from_bitField0_ = bitField0_;
-        if (connectionsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            connections_ = java.util.Collections.unmodifiableList(connections_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.connections_ = connections_;
+      public context.ContextOuterClass.ConnectionEvent buildPartial() {
+        context.ContextOuterClass.ConnectionEvent result = new context.ContextOuterClass.ConnectionEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
         } else {
-          result.connections_ = connectionsBuilder_.build();
+          result.event_ = eventBuilder_.build();
+        }
+        if (connectionIdBuilder_ == null) {
+          result.connectionId_ = connectionId_;
+        } else {
+          result.connectionId_ = connectionIdBuilder_.build();
         }
         onBuilt();
         return result;
@@ -44113,41 +45956,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionList) {
-          return mergeFrom((context.ContextOuterClass.ConnectionList)other);
+        if (other instanceof context.ContextOuterClass.ConnectionEvent) {
+          return mergeFrom((context.ContextOuterClass.ConnectionEvent)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionList other) {
-        if (other == context.ContextOuterClass.ConnectionList.getDefaultInstance()) return this;
-        if (connectionsBuilder_ == null) {
-          if (!other.connections_.isEmpty()) {
-            if (connections_.isEmpty()) {
-              connections_ = other.connections_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureConnectionsIsMutable();
-              connections_.addAll(other.connections_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.connections_.isEmpty()) {
-            if (connectionsBuilder_.isEmpty()) {
-              connectionsBuilder_.dispose();
-              connectionsBuilder_ = null;
-              connections_ = other.connections_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              connectionsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getConnectionsFieldBuilder() : null;
-            } else {
-              connectionsBuilder_.addAllMessages(other.connections_);
-            }
-          }
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionEvent other) {
+        if (other == context.ContextOuterClass.ConnectionEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
+        }
+        if (other.hasConnectionId()) {
+          mergeConnectionId(other.getConnectionId());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -44164,11 +45987,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionList parsedMessage = null;
+        context.ContextOuterClass.ConnectionEvent parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionEvent) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -44177,246 +46000,243 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
-
-      private java.util.List<context.ContextOuterClass.Connection> connections_ =
-        java.util.Collections.emptyList();
-      private void ensureConnectionsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          connections_ = new java.util.ArrayList<context.ContextOuterClass.Connection>(connections_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> connectionsBuilder_;
 
+      private context.ContextOuterClass.Event event_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
-       */
-      public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
-        if (connectionsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(connections_);
-        } else {
-          return connectionsBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
        */
-      public int getConnectionsCount() {
-        if (connectionsBuilder_ == null) {
-          return connections_.size();
-        } else {
-          return connectionsBuilder_.getCount();
-        }
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
        */
-      public context.ContextOuterClass.Connection getConnections(int index) {
-        if (connectionsBuilder_ == null) {
-          return connections_.get(index);
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         } else {
-          return connectionsBuilder_.getMessage(index);
+          return eventBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setConnections(
-          int index, context.ContextOuterClass.Connection value) {
-        if (connectionsBuilder_ == null) {
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureConnectionsIsMutable();
-          connections_.set(index, value);
+          event_ = value;
           onChanged();
         } else {
-          connectionsBuilder_.setMessage(index, value);
+          eventBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setConnections(
-          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          connections_.set(index, builderForValue.build());
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
           onChanged();
         } else {
-          connectionsBuilder_.setMessage(index, builderForValue.build());
+          eventBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addConnections(context.ContextOuterClass.Connection value) {
-        if (connectionsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (event_ != null) {
+            event_ =
+              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+          } else {
+            event_ = value;
           }
-          ensureConnectionsIsMutable();
-          connections_.add(value);
           onChanged();
         } else {
-          connectionsBuilder_.addMessage(value);
+          eventBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addConnections(
-          int index, context.ContextOuterClass.Connection value) {
-        if (connectionsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConnectionsIsMutable();
-          connections_.add(index, value);
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
           onChanged();
         } else {
-          connectionsBuilder_.addMessage(index, value);
+          event_ = null;
+          eventBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addConnections(
-          context.ContextOuterClass.Connection.Builder builderForValue) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          connections_.add(builderForValue.build());
-          onChanged();
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+        
+        onChanged();
+        return getEventFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
         } else {
-          connectionsBuilder_.addMessage(builderForValue.build());
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addConnections(
-          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          connections_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          connectionsBuilder_.addMessage(index, builderForValue.build());
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
+          getEventFieldBuilder() {
+        if (eventBuilder_ == null) {
+          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
+                  getEvent(),
+                  getParentForChildren(),
+                  isClean());
+          event_ = null;
         }
-        return this;
+        return eventBuilder_;
       }
+
+      private context.ContextOuterClass.ConnectionId connectionId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdBuilder_;
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
+       * @return Whether the connectionId field is set.
        */
-      public Builder addAllConnections(
-          java.lang.Iterable<? extends context.ContextOuterClass.Connection> values) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, connections_);
-          onChanged();
+      public boolean hasConnectionId() {
+        return connectionIdBuilder_ != null || connectionId_ != null;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 2;</code>
+       * @return The connectionId.
+       */
+      public context.ContextOuterClass.ConnectionId getConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
         } else {
-          connectionsBuilder_.addAllMessages(values);
+          return connectionIdBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public Builder clearConnections() {
-        if (connectionsBuilder_ == null) {
-          connections_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder setConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          connectionId_ = value;
           onChanged();
         } else {
-          connectionsBuilder_.clear();
+          connectionIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public Builder removeConnections(int index) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          connections_.remove(index);
+      public Builder setConnectionId(
+          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = builderForValue.build();
           onChanged();
         } else {
-          connectionsBuilder_.remove(index);
+          connectionIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
-       */
-      public context.ContextOuterClass.Connection.Builder getConnectionsBuilder(
-          int index) {
-        return getConnectionsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
-          int index) {
-        if (connectionsBuilder_ == null) {
-          return connections_.get(index);  } else {
-          return connectionsBuilder_.getMessageOrBuilder(index);
+      public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
+          if (connectionId_ != null) {
+            connectionId_ =
+              context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
+          } else {
+            connectionId_ = value;
+          }
+          onChanged();
+        } else {
+          connectionIdBuilder_.mergeFrom(value);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
-           getConnectionsOrBuilderList() {
-        if (connectionsBuilder_ != null) {
-          return connectionsBuilder_.getMessageOrBuilderList();
+      public Builder clearConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(connections_);
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder() {
-        return getConnectionsFieldBuilder().addBuilder(
-            context.ContextOuterClass.Connection.getDefaultInstance());
+      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
+        
+        onChanged();
+        return getConnectionIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder(
-          int index) {
-        return getConnectionsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Connection.getDefaultInstance());
+      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+        if (connectionIdBuilder_ != null) {
+          return connectionIdBuilder_.getMessageOrBuilder();
+        } else {
+          return connectionId_ == null ?
+              context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+        }
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public java.util.List<context.ContextOuterClass.Connection.Builder> 
-           getConnectionsBuilderList() {
-        return getConnectionsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> 
-          getConnectionsFieldBuilder() {
-        if (connectionsBuilder_ == null) {
-          connectionsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder>(
-                  connections_,
-                  ((bitField0_ & 0x00000001) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
+          getConnectionIdFieldBuilder() {
+        if (connectionIdBuilder_ == null) {
+          connectionIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
+                  getConnectionId(),
                   getParentForChildren(),
                   isClean());
-          connections_ = null;
+          connectionId_ = null;
         }
-        return connectionsBuilder_;
+        return connectionIdBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -44431,100 +46251,119 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionList)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionEvent)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionList)
-    private static final context.ContextOuterClass.ConnectionList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionEvent)
+    private static final context.ContextOuterClass.ConnectionEvent DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionEvent();
     }
 
-    public static context.ContextOuterClass.ConnectionList getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionEvent getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionList>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionList>() {
+    private static final com.google.protobuf.Parser<ConnectionEvent>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionEvent>() {
       @java.lang.Override
-      public ConnectionList parsePartialFrom(
+      public ConnectionEvent parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionList(input, extensionRegistry);
+        return new ConnectionEvent(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionList> parser() {
+    public static com.google.protobuf.Parser<ConnectionEvent> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionList> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionEvent> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionEvent getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionEventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionEvent)
+  public interface EndPointIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.EndPointId)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return Whether the topologyId field is set.
      */
-    boolean hasEvent();
+    boolean hasTopologyId();
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return The topologyId.
      */
-    context.ContextOuterClass.Event getEvent();
+    context.ContextOuterClass.TopologyId getTopologyId();
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>.context.TopologyId topology_id = 1;</code>
      */
-    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
 
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
-     * @return Whether the connectionId field is set.
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return Whether the deviceId field is set.
      */
-    boolean hasConnectionId();
+    boolean hasDeviceId();
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
-     * @return The connectionId.
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return The deviceId.
      */
-    context.ContextOuterClass.ConnectionId getConnectionId();
+    context.ContextOuterClass.DeviceId getDeviceId();
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
+     * <code>.context.DeviceId device_id = 2;</code>
      */
-    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
+
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * @return Whether the endpointUuid field is set.
+     */
+    boolean hasEndpointUuid();
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * @return The endpointUuid.
+     */
+    context.ContextOuterClass.Uuid getEndpointUuid();
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder();
   }
   /**
-   * Protobuf type {@code context.ConnectionEvent}
+   * <pre>
+   * ----- Endpoint ------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.EndPointId}
    */
-  public static final class ConnectionEvent extends
+  public static final class EndPointId extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionEvent)
-      ConnectionEventOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.EndPointId)
+      EndPointIdOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionEvent.newBuilder() to construct.
-    private ConnectionEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use EndPointId.newBuilder() to construct.
+    private EndPointId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionEvent() {
+    private EndPointId() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionEvent();
+      return new EndPointId();
     }
 
     @java.lang.Override
@@ -44532,7 +46371,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionEvent(
+    private EndPointId(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -44551,27 +46390,40 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Event.Builder subBuilder = null;
-              if (event_ != null) {
-                subBuilder = event_.toBuilder();
+              context.ContextOuterClass.TopologyId.Builder subBuilder = null;
+              if (topologyId_ != null) {
+                subBuilder = topologyId_.toBuilder();
               }
-              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              topologyId_ = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(event_);
-                event_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(topologyId_);
+                topologyId_ = subBuilder.buildPartial();
               }
 
               break;
             }
             case 18: {
-              context.ContextOuterClass.ConnectionId.Builder subBuilder = null;
-              if (connectionId_ != null) {
-                subBuilder = connectionId_.toBuilder();
+              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
+              if (deviceId_ != null) {
+                subBuilder = deviceId_.toBuilder();
               }
-              connectionId_ = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
+              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(connectionId_);
-                connectionId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(deviceId_);
+                deviceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 26: {
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (endpointUuid_ != null) {
+                subBuilder = endpointUuid_.toBuilder();
+              }
+              endpointUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endpointUuid_);
+                endpointUuid_ = subBuilder.buildPartial();
               }
 
               break;
@@ -44597,67 +46449,93 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
+      return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionEvent_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_EndPointId_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionEvent.class, context.ContextOuterClass.ConnectionEvent.Builder.class);
+              context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
     }
 
-    public static final int EVENT_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Event event_;
+    public static final int TOPOLOGY_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.TopologyId topologyId_;
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return Whether the topologyId field is set.
      */
     @java.lang.Override
-    public boolean hasEvent() {
-      return event_ != null;
+    public boolean hasTopologyId() {
+      return topologyId_ != null;
     }
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return The topologyId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Event getEvent() {
-      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    public context.ContextOuterClass.TopologyId getTopologyId() {
+      return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
     }
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>.context.TopologyId topology_id = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-      return getEvent();
+    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+      return getTopologyId();
     }
 
-    public static final int CONNECTION_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.ConnectionId connectionId_;
+    public static final int DEVICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.DeviceId deviceId_;
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
-     * @return Whether the connectionId field is set.
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return Whether the deviceId field is set.
      */
     @java.lang.Override
-    public boolean hasConnectionId() {
-      return connectionId_ != null;
+    public boolean hasDeviceId() {
+      return deviceId_ != null;
     }
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
-     * @return The connectionId.
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return The deviceId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionId getConnectionId() {
-      return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+    public context.ContextOuterClass.DeviceId getDeviceId() {
+      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
     }
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
+     * <code>.context.DeviceId device_id = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
-      return getConnectionId();
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+      return getDeviceId();
+    }
+
+    public static final int ENDPOINT_UUID_FIELD_NUMBER = 3;
+    private context.ContextOuterClass.Uuid endpointUuid_;
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * @return Whether the endpointUuid field is set.
+     */
+    @java.lang.Override
+    public boolean hasEndpointUuid() {
+      return endpointUuid_ != null;
+    }
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * @return The endpointUuid.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getEndpointUuid() {
+      return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
+    }
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
+      return getEndpointUuid();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -44674,11 +46552,14 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (event_ != null) {
-        output.writeMessage(1, getEvent());
+      if (topologyId_ != null) {
+        output.writeMessage(1, getTopologyId());
       }
-      if (connectionId_ != null) {
-        output.writeMessage(2, getConnectionId());
+      if (deviceId_ != null) {
+        output.writeMessage(2, getDeviceId());
+      }
+      if (endpointUuid_ != null) {
+        output.writeMessage(3, getEndpointUuid());
       }
       unknownFields.writeTo(output);
     }
@@ -44689,13 +46570,17 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (event_ != null) {
+      if (topologyId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEvent());
+          .computeMessageSize(1, getTopologyId());
       }
-      if (connectionId_ != null) {
+      if (deviceId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getConnectionId());
+          .computeMessageSize(2, getDeviceId());
+      }
+      if (endpointUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, getEndpointUuid());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -44707,20 +46592,25 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionEvent)) {
+      if (!(obj instanceof context.ContextOuterClass.EndPointId)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionEvent other = (context.ContextOuterClass.ConnectionEvent) obj;
-
-      if (hasEvent() != other.hasEvent()) return false;
-      if (hasEvent()) {
-        if (!getEvent()
-            .equals(other.getEvent())) return false;
+      context.ContextOuterClass.EndPointId other = (context.ContextOuterClass.EndPointId) obj;
+
+      if (hasTopologyId() != other.hasTopologyId()) return false;
+      if (hasTopologyId()) {
+        if (!getTopologyId()
+            .equals(other.getTopologyId())) return false;
+      }
+      if (hasDeviceId() != other.hasDeviceId()) return false;
+      if (hasDeviceId()) {
+        if (!getDeviceId()
+            .equals(other.getDeviceId())) return false;
       }
-      if (hasConnectionId() != other.hasConnectionId()) return false;
-      if (hasConnectionId()) {
-        if (!getConnectionId()
-            .equals(other.getConnectionId())) return false;
+      if (hasEndpointUuid() != other.hasEndpointUuid()) return false;
+      if (hasEndpointUuid()) {
+        if (!getEndpointUuid()
+            .equals(other.getEndpointUuid())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -44733,82 +46623,86 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasEvent()) {
-        hash = (37 * hash) + EVENT_FIELD_NUMBER;
-        hash = (53 * hash) + getEvent().hashCode();
+      if (hasTopologyId()) {
+        hash = (37 * hash) + TOPOLOGY_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologyId().hashCode();
       }
-      if (hasConnectionId()) {
-        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionId().hashCode();
+      if (hasDeviceId()) {
+        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceId().hashCode();
+      }
+      if (hasEndpointUuid()) {
+        hash = (37 * hash) + ENDPOINT_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointUuid().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(byte[] data)
+    public static context.ContextOuterClass.EndPointId parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.EndPointId parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.EndPointId parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseDelimitedFrom(
+    public static context.ContextOuterClass.EndPointId parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -44821,7 +46715,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionEvent prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.EndPointId prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -44837,26 +46731,30 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionEvent}
+     * <pre>
+     * ----- Endpoint ------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.EndPointId}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionEvent)
-        context.ContextOuterClass.ConnectionEventOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.EndPointId)
+        context.ContextOuterClass.EndPointIdOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionEvent_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_EndPointId_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionEvent.class, context.ContextOuterClass.ConnectionEvent.Builder.class);
+                context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionEvent.newBuilder()
+      // Construct using context.ContextOuterClass.EndPointId.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -44874,17 +46772,23 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (eventBuilder_ == null) {
-          event_ = null;
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
         }
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = null;
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
         } else {
-          connectionId_ = null;
-          connectionIdBuilder_ = null;
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+        if (endpointUuidBuilder_ == null) {
+          endpointUuid_ = null;
+        } else {
+          endpointUuid_ = null;
+          endpointUuidBuilder_ = null;
         }
         return this;
       }
@@ -44892,17 +46796,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionEvent getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionEvent.getDefaultInstance();
+      public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
+        return context.ContextOuterClass.EndPointId.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionEvent build() {
-        context.ContextOuterClass.ConnectionEvent result = buildPartial();
+      public context.ContextOuterClass.EndPointId build() {
+        context.ContextOuterClass.EndPointId result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -44910,17 +46814,22 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionEvent buildPartial() {
-        context.ContextOuterClass.ConnectionEvent result = new context.ContextOuterClass.ConnectionEvent(this);
-        if (eventBuilder_ == null) {
-          result.event_ = event_;
+      public context.ContextOuterClass.EndPointId buildPartial() {
+        context.ContextOuterClass.EndPointId result = new context.ContextOuterClass.EndPointId(this);
+        if (topologyIdBuilder_ == null) {
+          result.topologyId_ = topologyId_;
         } else {
-          result.event_ = eventBuilder_.build();
+          result.topologyId_ = topologyIdBuilder_.build();
         }
-        if (connectionIdBuilder_ == null) {
-          result.connectionId_ = connectionId_;
+        if (deviceIdBuilder_ == null) {
+          result.deviceId_ = deviceId_;
         } else {
-          result.connectionId_ = connectionIdBuilder_.build();
+          result.deviceId_ = deviceIdBuilder_.build();
+        }
+        if (endpointUuidBuilder_ == null) {
+          result.endpointUuid_ = endpointUuid_;
+        } else {
+          result.endpointUuid_ = endpointUuidBuilder_.build();
         }
         onBuilt();
         return result;
@@ -44960,287 +46869,409 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionEvent) {
-          return mergeFrom((context.ContextOuterClass.ConnectionEvent)other);
+        if (other instanceof context.ContextOuterClass.EndPointId) {
+          return mergeFrom((context.ContextOuterClass.EndPointId)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.EndPointId other) {
+        if (other == context.ContextOuterClass.EndPointId.getDefaultInstance()) return this;
+        if (other.hasTopologyId()) {
+          mergeTopologyId(other.getTopologyId());
+        }
+        if (other.hasDeviceId()) {
+          mergeDeviceId(other.getDeviceId());
+        }
+        if (other.hasEndpointUuid()) {
+          mergeEndpointUuid(other.getEndpointUuid());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.EndPointId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.EndPointId) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.TopologyId topologyId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdBuilder_;
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       * @return Whether the topologyId field is set.
+       */
+      public boolean hasTopologyId() {
+        return topologyIdBuilder_ != null || topologyId_ != null;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       * @return The topologyId.
+       */
+      public context.ContextOuterClass.TopologyId getTopologyId() {
+        if (topologyIdBuilder_ == null) {
+          return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+        } else {
+          return topologyIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder setTopologyId(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          topologyId_ = value;
+          onChanged();
+        } else {
+          topologyIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder setTopologyId(
+          context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = builderForValue.build();
+          onChanged();
+        } else {
+          topologyIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder mergeTopologyId(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdBuilder_ == null) {
+          if (topologyId_ != null) {
+            topologyId_ =
+              context.ContextOuterClass.TopologyId.newBuilder(topologyId_).mergeFrom(value).buildPartial();
+          } else {
+            topologyId_ = value;
+          }
+          onChanged();
+        } else {
+          topologyIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder clearTopologyId() {
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
+          onChanged();
         } else {
-          super.mergeFrom(other);
-          return this;
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
         }
-      }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionEvent other) {
-        if (other == context.ContextOuterClass.ConnectionEvent.getDefaultInstance()) return this;
-        if (other.hasEvent()) {
-          mergeEvent(other.getEvent());
-        }
-        if (other.hasConnectionId()) {
-          mergeConnectionId(other.getConnectionId());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
         return this;
       }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
+        
+        onChanged();
+        return getTopologyIdFieldBuilder().getBuilder();
       }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.ConnectionEvent parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionEvent) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+        if (topologyIdBuilder_ != null) {
+          return topologyIdBuilder_.getMessageOrBuilder();
+        } else {
+          return topologyId_ == null ?
+              context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
         }
-        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
+          getTopologyIdFieldBuilder() {
+        if (topologyIdBuilder_ == null) {
+          topologyIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
+                  getTopologyId(),
+                  getParentForChildren(),
+                  isClean());
+          topologyId_ = null;
+        }
+        return topologyIdBuilder_;
       }
 
-      private context.ContextOuterClass.Event event_;
+      private context.ContextOuterClass.DeviceId deviceId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return Whether the event field is set.
+       * <code>.context.DeviceId device_id = 2;</code>
+       * @return Whether the deviceId field is set.
        */
-      public boolean hasEvent() {
-        return eventBuilder_ != null || event_ != null;
+      public boolean hasDeviceId() {
+        return deviceIdBuilder_ != null || deviceId_ != null;
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return The event.
+       * <code>.context.DeviceId device_id = 2;</code>
+       * @return The deviceId.
        */
-      public context.ContextOuterClass.Event getEvent() {
-        if (eventBuilder_ == null) {
-          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+      public context.ContextOuterClass.DeviceId getDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
         } else {
-          return eventBuilder_.getMessage();
+          return deviceIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public Builder setEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
+      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          event_ = value;
+          deviceId_ = value;
           onChanged();
         } else {
-          eventBuilder_.setMessage(value);
+          deviceIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public Builder setEvent(
-          context.ContextOuterClass.Event.Builder builderForValue) {
-        if (eventBuilder_ == null) {
-          event_ = builderForValue.build();
+      public Builder setDeviceId(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = builderForValue.build();
           onChanged();
         } else {
-          eventBuilder_.setMessage(builderForValue.build());
+          deviceIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public Builder mergeEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
-          if (event_ != null) {
-            event_ =
-              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (deviceId_ != null) {
+            deviceId_ =
+              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
           } else {
-            event_ = value;
+            deviceId_ = value;
           }
           onChanged();
         } else {
-          eventBuilder_.mergeFrom(value);
+          deviceIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public Builder clearEvent() {
-        if (eventBuilder_ == null) {
-          event_ = null;
+      public Builder clearDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
           onChanged();
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
         
         onChanged();
-        return getEventFieldBuilder().getBuilder();
+        return getDeviceIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-        if (eventBuilder_ != null) {
-          return eventBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+        if (deviceIdBuilder_ != null) {
+          return deviceIdBuilder_.getMessageOrBuilder();
         } else {
-          return event_ == null ?
-              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+          return deviceId_ == null ?
+              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
-          getEventFieldBuilder() {
-        if (eventBuilder_ == null) {
-          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
-                  getEvent(),
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdFieldBuilder() {
+        if (deviceIdBuilder_ == null) {
+          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  getDeviceId(),
                   getParentForChildren(),
                   isClean());
-          event_ = null;
+          deviceId_ = null;
         }
-        return eventBuilder_;
+        return deviceIdBuilder_;
       }
 
-      private context.ContextOuterClass.ConnectionId connectionId_;
+      private context.ContextOuterClass.Uuid endpointUuid_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdBuilder_;
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> endpointUuidBuilder_;
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
-       * @return Whether the connectionId field is set.
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * @return Whether the endpointUuid field is set.
        */
-      public boolean hasConnectionId() {
-        return connectionIdBuilder_ != null || connectionId_ != null;
+      public boolean hasEndpointUuid() {
+        return endpointUuidBuilder_ != null || endpointUuid_ != null;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
-       * @return The connectionId.
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * @return The endpointUuid.
        */
-      public context.ContextOuterClass.ConnectionId getConnectionId() {
-        if (connectionIdBuilder_ == null) {
-          return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+      public context.ContextOuterClass.Uuid getEndpointUuid() {
+        if (endpointUuidBuilder_ == null) {
+          return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
         } else {
-          return connectionIdBuilder_.getMessage();
+          return endpointUuidBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public Builder setConnectionId(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdBuilder_ == null) {
+      public Builder setEndpointUuid(context.ContextOuterClass.Uuid value) {
+        if (endpointUuidBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          connectionId_ = value;
+          endpointUuid_ = value;
           onChanged();
         } else {
-          connectionIdBuilder_.setMessage(value);
+          endpointUuidBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public Builder setConnectionId(
-          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = builderForValue.build();
+      public Builder setEndpointUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (endpointUuidBuilder_ == null) {
+          endpointUuid_ = builderForValue.build();
           onChanged();
         } else {
-          connectionIdBuilder_.setMessage(builderForValue.build());
+          endpointUuidBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdBuilder_ == null) {
-          if (connectionId_ != null) {
-            connectionId_ =
-              context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
+      public Builder mergeEndpointUuid(context.ContextOuterClass.Uuid value) {
+        if (endpointUuidBuilder_ == null) {
+          if (endpointUuid_ != null) {
+            endpointUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(endpointUuid_).mergeFrom(value).buildPartial();
           } else {
-            connectionId_ = value;
+            endpointUuid_ = value;
           }
           onChanged();
         } else {
-          connectionIdBuilder_.mergeFrom(value);
+          endpointUuidBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public Builder clearConnectionId() {
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = null;
+      public Builder clearEndpointUuid() {
+        if (endpointUuidBuilder_ == null) {
+          endpointUuid_ = null;
           onChanged();
         } else {
-          connectionId_ = null;
-          connectionIdBuilder_ = null;
+          endpointUuid_ = null;
+          endpointUuidBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
+      public context.ContextOuterClass.Uuid.Builder getEndpointUuidBuilder() {
         
         onChanged();
-        return getConnectionIdFieldBuilder().getBuilder();
+        return getEndpointUuidFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
-        if (connectionIdBuilder_ != null) {
-          return connectionIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
+        if (endpointUuidBuilder_ != null) {
+          return endpointUuidBuilder_.getMessageOrBuilder();
         } else {
-          return connectionId_ == null ?
-              context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+          return endpointUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
         }
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
-          getConnectionIdFieldBuilder() {
-        if (connectionIdBuilder_ == null) {
-          connectionIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
-                  getConnectionId(),
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getEndpointUuidFieldBuilder() {
+        if (endpointUuidBuilder_ == null) {
+          endpointUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getEndpointUuid(),
                   getParentForChildren(),
                   isClean());
-          connectionId_ = null;
+          endpointUuid_ = null;
         }
-        return connectionIdBuilder_;
+        return endpointUuidBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -45255,119 +47286,143 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionEvent)
+      // @@protoc_insertion_point(builder_scope:context.EndPointId)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionEvent)
-    private static final context.ContextOuterClass.ConnectionEvent DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.EndPointId)
+    private static final context.ContextOuterClass.EndPointId DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionEvent();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPointId();
     }
 
-    public static context.ContextOuterClass.ConnectionEvent getDefaultInstance() {
+    public static context.ContextOuterClass.EndPointId getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionEvent>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionEvent>() {
+    private static final com.google.protobuf.Parser<EndPointId>
+        PARSER = new com.google.protobuf.AbstractParser<EndPointId>() {
       @java.lang.Override
-      public ConnectionEvent parsePartialFrom(
+      public EndPointId parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionEvent(input, extensionRegistry);
+        return new EndPointId(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionEvent> parser() {
+    public static com.google.protobuf.Parser<EndPointId> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionEvent> getParserForType() {
+    public com.google.protobuf.Parser<EndPointId> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionEvent getDefaultInstanceForType() {
+    public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface EndPointIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.EndPointId)
+  public interface EndPointOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.EndPoint)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return Whether the topologyId field is set.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
-    boolean hasTopologyId();
+    boolean hasEndpointId();
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return The topologyId.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
-    context.ContextOuterClass.TopologyId getTopologyId();
+    context.ContextOuterClass.EndPointId getEndpointId();
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
      */
-    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
 
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return Whether the deviceId field is set.
+     * <code>string endpoint_type = 2;</code>
+     * @return The endpointType.
      */
-    boolean hasDeviceId();
+    java.lang.String getEndpointType();
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return The deviceId.
+     * <code>string endpoint_type = 2;</code>
+     * @return The bytes for endpointType.
      */
-    context.ContextOuterClass.DeviceId getDeviceId();
+    com.google.protobuf.ByteString
+        getEndpointTypeBytes();
+
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return A list containing the kpiSampleTypes.
      */
-    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
+    java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList();
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return The count of kpiSampleTypes.
+     */
+    int getKpiSampleTypesCount();
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @param index The index of the element to return.
+     * @return The kpiSampleTypes at the given index.
+     */
+    kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index);
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
+     */
+    java.util.List<java.lang.Integer>
+    getKpiSampleTypesValueList();
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
+     */
+    int getKpiSampleTypesValue(int index);
 
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
-     * @return Whether the endpointUuid field is set.
+     * <code>.context.Location endpoint_location = 4;</code>
+     * @return Whether the endpointLocation field is set.
      */
-    boolean hasEndpointUuid();
+    boolean hasEndpointLocation();
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
-     * @return The endpointUuid.
+     * <code>.context.Location endpoint_location = 4;</code>
+     * @return The endpointLocation.
      */
-    context.ContextOuterClass.Uuid getEndpointUuid();
+    context.ContextOuterClass.Location getEndpointLocation();
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * <code>.context.Location endpoint_location = 4;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder();
+    context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder();
   }
   /**
-   * <pre>
-   * ----- Endpoint ------------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.EndPointId}
+   * Protobuf type {@code context.EndPoint}
    */
-  public static final class EndPointId extends
+  public static final class EndPoint extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.EndPointId)
-      EndPointIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.EndPoint)
+      EndPointOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use EndPointId.newBuilder() to construct.
-    private EndPointId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use EndPoint.newBuilder() to construct.
+    private EndPoint(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private EndPointId() {
+    private EndPoint() {
+      endpointType_ = "";
+      kpiSampleTypes_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new EndPointId();
+      return new EndPoint();
     }
 
     @java.lang.Override
@@ -45375,7 +47430,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private EndPointId(
+    private EndPoint(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -45383,6 +47438,7 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -45394,40 +47450,56 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.TopologyId.Builder subBuilder = null;
-              if (topologyId_ != null) {
-                subBuilder = topologyId_.toBuilder();
+              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
+              if (endpointId_ != null) {
+                subBuilder = endpointId_.toBuilder();
               }
-              topologyId_ = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
+              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(topologyId_);
-                topologyId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(endpointId_);
+                endpointId_ = subBuilder.buildPartial();
               }
 
               break;
             }
             case 18: {
-              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
-              if (deviceId_ != null) {
-                subBuilder = deviceId_.toBuilder();
-              }
-              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(deviceId_);
-                deviceId_ = subBuilder.buildPartial();
-              }
+              java.lang.String s = input.readStringRequireUtf8();
 
+              endpointType_ = s;
+              break;
+            }
+            case 24: {
+              int rawValue = input.readEnum();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              kpiSampleTypes_.add(rawValue);
               break;
             }
             case 26: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (endpointUuid_ != null) {
-                subBuilder = endpointUuid_.toBuilder();
+              int length = input.readRawVarint32();
+              int oldLimit = input.pushLimit(length);
+              while(input.getBytesUntilLimit() > 0) {
+                int rawValue = input.readEnum();
+                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                  kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>();
+                  mutable_bitField0_ |= 0x00000001;
+                }
+                kpiSampleTypes_.add(rawValue);
               }
-              endpointUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              input.popLimit(oldLimit);
+              break;
+            }
+            case 34: {
+              context.ContextOuterClass.Location.Builder subBuilder = null;
+              if (endpointLocation_ != null) {
+                subBuilder = endpointLocation_.toBuilder();
+              }
+              endpointLocation_ = input.readMessage(context.ContextOuterClass.Location.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(endpointUuid_);
-                endpointUuid_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(endpointLocation_);
+                endpointLocation_ = subBuilder.buildPartial();
               }
 
               break;
@@ -45447,99 +47519,172 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          kpiSampleTypes_ = java.util.Collections.unmodifiableList(kpiSampleTypes_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+      return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_EndPoint_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
+    }
+
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.EndPointId endpointId_;
+    /**
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
+     */
+    @java.lang.Override
+    public boolean hasEndpointId() {
+      return endpointId_ != null;
+    }
+    /**
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getEndpointId() {
+      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+    }
+    /**
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+      return getEndpointId();
     }
 
+    public static final int ENDPOINT_TYPE_FIELD_NUMBER = 2;
+    private volatile java.lang.Object endpointType_;
+    /**
+     * <code>string endpoint_type = 2;</code>
+     * @return The endpointType.
+     */
     @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_EndPointId_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
+    public java.lang.String getEndpointType() {
+      java.lang.Object ref = endpointType_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        endpointType_ = s;
+        return s;
+      }
     }
-
-    public static final int TOPOLOGY_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.TopologyId topologyId_;
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return Whether the topologyId field is set.
+     * <code>string endpoint_type = 2;</code>
+     * @return The bytes for endpointType.
      */
     @java.lang.Override
-    public boolean hasTopologyId() {
-      return topologyId_ != null;
+    public com.google.protobuf.ByteString
+        getEndpointTypeBytes() {
+      java.lang.Object ref = endpointType_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        endpointType_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
+
+    public static final int KPI_SAMPLE_TYPES_FIELD_NUMBER = 3;
+    private java.util.List<java.lang.Integer> kpiSampleTypes_;
+    private static final com.google.protobuf.Internal.ListAdapter.Converter<
+        java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType> kpiSampleTypes_converter_ =
+            new com.google.protobuf.Internal.ListAdapter.Converter<
+                java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>() {
+              public kpi_sample_types.KpiSampleTypes.KpiSampleType convert(java.lang.Integer from) {
+                @SuppressWarnings("deprecation")
+                kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(from);
+                return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
+              }
+            };
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return The topologyId.
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return A list containing the kpiSampleTypes.
      */
     @java.lang.Override
-    public context.ContextOuterClass.TopologyId getTopologyId() {
-      return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+    public java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList() {
+      return new com.google.protobuf.Internal.ListAdapter<
+          java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>(kpiSampleTypes_, kpiSampleTypes_converter_);
     }
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return The count of kpiSampleTypes.
      */
     @java.lang.Override
-    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
-      return getTopologyId();
+    public int getKpiSampleTypesCount() {
+      return kpiSampleTypes_.size();
     }
-
-    public static final int DEVICE_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.DeviceId deviceId_;
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return Whether the deviceId field is set.
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @param index The index of the element to return.
+     * @return The kpiSampleTypes at the given index.
      */
     @java.lang.Override
-    public boolean hasDeviceId() {
-      return deviceId_ != null;
+    public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index) {
+      return kpiSampleTypes_converter_.convert(kpiSampleTypes_.get(index));
     }
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return The deviceId.
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
      */
     @java.lang.Override
-    public context.ContextOuterClass.DeviceId getDeviceId() {
-      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+    public java.util.List<java.lang.Integer>
+    getKpiSampleTypesValueList() {
+      return kpiSampleTypes_;
     }
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
      */
     @java.lang.Override
-    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-      return getDeviceId();
+    public int getKpiSampleTypesValue(int index) {
+      return kpiSampleTypes_.get(index);
     }
+    private int kpiSampleTypesMemoizedSerializedSize;
 
-    public static final int ENDPOINT_UUID_FIELD_NUMBER = 3;
-    private context.ContextOuterClass.Uuid endpointUuid_;
+    public static final int ENDPOINT_LOCATION_FIELD_NUMBER = 4;
+    private context.ContextOuterClass.Location endpointLocation_;
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
-     * @return Whether the endpointUuid field is set.
+     * <code>.context.Location endpoint_location = 4;</code>
+     * @return Whether the endpointLocation field is set.
      */
     @java.lang.Override
-    public boolean hasEndpointUuid() {
-      return endpointUuid_ != null;
+    public boolean hasEndpointLocation() {
+      return endpointLocation_ != null;
     }
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
-     * @return The endpointUuid.
+     * <code>.context.Location endpoint_location = 4;</code>
+     * @return The endpointLocation.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getEndpointUuid() {
-      return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
+    public context.ContextOuterClass.Location getEndpointLocation() {
+      return endpointLocation_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
     }
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * <code>.context.Location endpoint_location = 4;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
-      return getEndpointUuid();
+    public context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder() {
+      return getEndpointLocation();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -45556,14 +47701,22 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (topologyId_ != null) {
-        output.writeMessage(1, getTopologyId());
+      getSerializedSize();
+      if (endpointId_ != null) {
+        output.writeMessage(1, getEndpointId());
       }
-      if (deviceId_ != null) {
-        output.writeMessage(2, getDeviceId());
+      if (!getEndpointTypeBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, endpointType_);
       }
-      if (endpointUuid_ != null) {
-        output.writeMessage(3, getEndpointUuid());
+      if (getKpiSampleTypesList().size() > 0) {
+        output.writeUInt32NoTag(26);
+        output.writeUInt32NoTag(kpiSampleTypesMemoizedSerializedSize);
+      }
+      for (int i = 0; i < kpiSampleTypes_.size(); i++) {
+        output.writeEnumNoTag(kpiSampleTypes_.get(i));
+      }
+      if (endpointLocation_ != null) {
+        output.writeMessage(4, getEndpointLocation());
       }
       unknownFields.writeTo(output);
     }
@@ -45574,17 +47727,28 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (topologyId_ != null) {
+      if (endpointId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getTopologyId());
+          .computeMessageSize(1, getEndpointId());
       }
-      if (deviceId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getDeviceId());
+      if (!getEndpointTypeBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, endpointType_);
       }
-      if (endpointUuid_ != null) {
+      {
+        int dataSize = 0;
+        for (int i = 0; i < kpiSampleTypes_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeEnumSizeNoTag(kpiSampleTypes_.get(i));
+        }
+        size += dataSize;
+        if (!getKpiSampleTypesList().isEmpty()) {  size += 1;
+          size += com.google.protobuf.CodedOutputStream
+            .computeUInt32SizeNoTag(dataSize);
+        }kpiSampleTypesMemoizedSerializedSize = dataSize;
+      }
+      if (endpointLocation_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, getEndpointUuid());
+          .computeMessageSize(4, getEndpointLocation());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -45596,25 +47760,23 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.EndPointId)) {
+      if (!(obj instanceof context.ContextOuterClass.EndPoint)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.EndPointId other = (context.ContextOuterClass.EndPointId) obj;
+      context.ContextOuterClass.EndPoint other = (context.ContextOuterClass.EndPoint) obj;
 
-      if (hasTopologyId() != other.hasTopologyId()) return false;
-      if (hasTopologyId()) {
-        if (!getTopologyId()
-            .equals(other.getTopologyId())) return false;
-      }
-      if (hasDeviceId() != other.hasDeviceId()) return false;
-      if (hasDeviceId()) {
-        if (!getDeviceId()
-            .equals(other.getDeviceId())) return false;
+      if (hasEndpointId() != other.hasEndpointId()) return false;
+      if (hasEndpointId()) {
+        if (!getEndpointId()
+            .equals(other.getEndpointId())) return false;
       }
-      if (hasEndpointUuid() != other.hasEndpointUuid()) return false;
-      if (hasEndpointUuid()) {
-        if (!getEndpointUuid()
-            .equals(other.getEndpointUuid())) return false;
+      if (!getEndpointType()
+          .equals(other.getEndpointType())) return false;
+      if (!kpiSampleTypes_.equals(other.kpiSampleTypes_)) return false;
+      if (hasEndpointLocation() != other.hasEndpointLocation()) return false;
+      if (hasEndpointLocation()) {
+        if (!getEndpointLocation()
+            .equals(other.getEndpointLocation())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -45627,86 +47789,88 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasTopologyId()) {
-        hash = (37 * hash) + TOPOLOGY_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getTopologyId().hashCode();
+      if (hasEndpointId()) {
+        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointId().hashCode();
       }
-      if (hasDeviceId()) {
-        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceId().hashCode();
+      hash = (37 * hash) + ENDPOINT_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + getEndpointType().hashCode();
+      if (getKpiSampleTypesCount() > 0) {
+        hash = (37 * hash) + KPI_SAMPLE_TYPES_FIELD_NUMBER;
+        hash = (53 * hash) + kpiSampleTypes_.hashCode();
       }
-      if (hasEndpointUuid()) {
-        hash = (37 * hash) + ENDPOINT_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getEndpointUuid().hashCode();
+      if (hasEndpointLocation()) {
+        hash = (37 * hash) + ENDPOINT_LOCATION_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointLocation().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(byte[] data)
+    public static context.ContextOuterClass.EndPoint parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.EndPoint parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.EndPoint parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPointId parseDelimitedFrom(
+    public static context.ContextOuterClass.EndPoint parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -45719,7 +47883,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.EndPointId prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.EndPoint prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -45735,30 +47899,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Endpoint ------------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.EndPointId}
+     * Protobuf type {@code context.EndPoint}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.EndPointId)
-        context.ContextOuterClass.EndPointIdOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.EndPoint)
+        context.ContextOuterClass.EndPointOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+        return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_EndPointId_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_EndPoint_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
+                context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.EndPointId.newBuilder()
+      // Construct using context.ContextOuterClass.EndPoint.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -45776,23 +47936,21 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = null;
-        } else {
-          topologyId_ = null;
-          topologyIdBuilder_ = null;
-        }
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
         } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
         }
-        if (endpointUuidBuilder_ == null) {
-          endpointUuid_ = null;
+        endpointType_ = "";
+
+        kpiSampleTypes_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        if (endpointLocationBuilder_ == null) {
+          endpointLocation_ = null;
         } else {
-          endpointUuid_ = null;
-          endpointUuidBuilder_ = null;
+          endpointLocation_ = null;
+          endpointLocationBuilder_ = null;
         }
         return this;
       }
@@ -45800,17 +47958,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+        return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
-        return context.ContextOuterClass.EndPointId.getDefaultInstance();
+      public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
+        return context.ContextOuterClass.EndPoint.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPointId build() {
-        context.ContextOuterClass.EndPointId result = buildPartial();
+      public context.ContextOuterClass.EndPoint build() {
+        context.ContextOuterClass.EndPoint result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -45818,22 +47976,24 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPointId buildPartial() {
-        context.ContextOuterClass.EndPointId result = new context.ContextOuterClass.EndPointId(this);
-        if (topologyIdBuilder_ == null) {
-          result.topologyId_ = topologyId_;
+      public context.ContextOuterClass.EndPoint buildPartial() {
+        context.ContextOuterClass.EndPoint result = new context.ContextOuterClass.EndPoint(this);
+        int from_bitField0_ = bitField0_;
+        if (endpointIdBuilder_ == null) {
+          result.endpointId_ = endpointId_;
         } else {
-          result.topologyId_ = topologyIdBuilder_.build();
+          result.endpointId_ = endpointIdBuilder_.build();
         }
-        if (deviceIdBuilder_ == null) {
-          result.deviceId_ = deviceId_;
-        } else {
-          result.deviceId_ = deviceIdBuilder_.build();
+        result.endpointType_ = endpointType_;
+        if (((bitField0_ & 0x00000001) != 0)) {
+          kpiSampleTypes_ = java.util.Collections.unmodifiableList(kpiSampleTypes_);
+          bitField0_ = (bitField0_ & ~0x00000001);
         }
-        if (endpointUuidBuilder_ == null) {
-          result.endpointUuid_ = endpointUuid_;
+        result.kpiSampleTypes_ = kpiSampleTypes_;
+        if (endpointLocationBuilder_ == null) {
+          result.endpointLocation_ = endpointLocation_;
         } else {
-          result.endpointUuid_ = endpointUuidBuilder_.build();
+          result.endpointLocation_ = endpointLocationBuilder_.build();
         }
         onBuilt();
         return result;
@@ -45873,24 +48033,35 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.EndPointId) {
-          return mergeFrom((context.ContextOuterClass.EndPointId)other);
+        if (other instanceof context.ContextOuterClass.EndPoint) {
+          return mergeFrom((context.ContextOuterClass.EndPoint)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.EndPointId other) {
-        if (other == context.ContextOuterClass.EndPointId.getDefaultInstance()) return this;
-        if (other.hasTopologyId()) {
-          mergeTopologyId(other.getTopologyId());
+      public Builder mergeFrom(context.ContextOuterClass.EndPoint other) {
+        if (other == context.ContextOuterClass.EndPoint.getDefaultInstance()) return this;
+        if (other.hasEndpointId()) {
+          mergeEndpointId(other.getEndpointId());
         }
-        if (other.hasDeviceId()) {
-          mergeDeviceId(other.getDeviceId());
+        if (!other.getEndpointType().isEmpty()) {
+          endpointType_ = other.endpointType_;
+          onChanged();
         }
-        if (other.hasEndpointUuid()) {
-          mergeEndpointUuid(other.getEndpointUuid());
+        if (!other.kpiSampleTypes_.isEmpty()) {
+          if (kpiSampleTypes_.isEmpty()) {
+            kpiSampleTypes_ = other.kpiSampleTypes_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureKpiSampleTypesIsMutable();
+            kpiSampleTypes_.addAll(other.kpiSampleTypes_);
+          }
+          onChanged();
+        }
+        if (other.hasEndpointLocation()) {
+          mergeEndpointLocation(other.getEndpointLocation());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -45907,11 +48078,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.EndPointId parsedMessage = null;
+        context.ContextOuterClass.EndPoint parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.EndPointId) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.EndPoint) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -45920,362 +48091,460 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int bitField0_;
 
-      private context.ContextOuterClass.TopologyId topologyId_;
+      private context.ContextOuterClass.EndPointId endpointId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdBuilder_;
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       * @return Whether the topologyId field is set.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return Whether the endpointId field is set.
        */
-      public boolean hasTopologyId() {
-        return topologyIdBuilder_ != null || topologyId_ != null;
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       * @return The topologyId.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return The endpointId.
        */
-      public context.ContextOuterClass.TopologyId getTopologyId() {
-        if (topologyIdBuilder_ == null) {
-          return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+      public context.ContextOuterClass.EndPointId getEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         } else {
-          return topologyIdBuilder_.getMessage();
+          return endpointIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setTopologyId(context.ContextOuterClass.TopologyId value) {
-        if (topologyIdBuilder_ == null) {
+      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          topologyId_ = value;
+          endpointId_ = value;
           onChanged();
         } else {
-          topologyIdBuilder_.setMessage(value);
+          endpointIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setTopologyId(
-          context.ContextOuterClass.TopologyId.Builder builderForValue) {
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = builderForValue.build();
+      public Builder setEndpointId(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = builderForValue.build();
           onChanged();
         } else {
-          topologyIdBuilder_.setMessage(builderForValue.build());
+          endpointIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder mergeTopologyId(context.ContextOuterClass.TopologyId value) {
-        if (topologyIdBuilder_ == null) {
-          if (topologyId_ != null) {
-            topologyId_ =
-              context.ContextOuterClass.TopologyId.newBuilder(topologyId_).mergeFrom(value).buildPartial();
+      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (endpointId_ != null) {
+            endpointId_ =
+              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
           } else {
-            topologyId_ = value;
+            endpointId_ = value;
           }
           onChanged();
         } else {
-          topologyIdBuilder_.mergeFrom(value);
+          endpointIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+          onChanged();
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+        
+        onChanged();
+        return getEndpointIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+        if (endpointIdBuilder_ != null) {
+          return endpointIdBuilder_.getMessageOrBuilder();
+        } else {
+          return endpointId_ == null ?
+              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        }
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getEndpointIdFieldBuilder() {
+        if (endpointIdBuilder_ == null) {
+          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  getEndpointId(),
+                  getParentForChildren(),
+                  isClean());
+          endpointId_ = null;
+        }
+        return endpointIdBuilder_;
+      }
+
+      private java.lang.Object endpointType_ = "";
+      /**
+       * <code>string endpoint_type = 2;</code>
+       * @return The endpointType.
+       */
+      public java.lang.String getEndpointType() {
+        java.lang.Object ref = endpointType_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          endpointType_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string endpoint_type = 2;</code>
+       * @return The bytes for endpointType.
+       */
+      public com.google.protobuf.ByteString
+          getEndpointTypeBytes() {
+        java.lang.Object ref = endpointType_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          endpointType_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string endpoint_type = 2;</code>
+       * @param value The endpointType to set.
+       * @return This builder for chaining.
        */
-      public Builder clearTopologyId() {
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = null;
-          onChanged();
-        } else {
-          topologyId_ = null;
-          topologyIdBuilder_ = null;
-        }
-
+      public Builder setEndpointType(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        endpointType_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>string endpoint_type = 2;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
+      public Builder clearEndpointType() {
         
+        endpointType_ = getDefaultInstance().getEndpointType();
         onChanged();
-        return getTopologyIdFieldBuilder().getBuilder();
+        return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>string endpoint_type = 2;</code>
+       * @param value The bytes for endpointType to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
-        if (topologyIdBuilder_ != null) {
-          return topologyIdBuilder_.getMessageOrBuilder();
-        } else {
-          return topologyId_ == null ?
-              context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+      public Builder setEndpointTypeBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        endpointType_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.util.List<java.lang.Integer> kpiSampleTypes_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiSampleTypesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>(kpiSampleTypes_);
+          bitField0_ |= 0x00000001;
         }
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @return A list containing the kpiSampleTypes.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
-          getTopologyIdFieldBuilder() {
-        if (topologyIdBuilder_ == null) {
-          topologyIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
-                  getTopologyId(),
-                  getParentForChildren(),
-                  isClean());
-          topologyId_ = null;
-        }
-        return topologyIdBuilder_;
+      public java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList() {
+        return new com.google.protobuf.Internal.ListAdapter<
+            java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>(kpiSampleTypes_, kpiSampleTypes_converter_);
       }
-
-      private context.ContextOuterClass.DeviceId deviceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       * @return Whether the deviceId field is set.
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @return The count of kpiSampleTypes.
        */
-      public boolean hasDeviceId() {
-        return deviceIdBuilder_ != null || deviceId_ != null;
+      public int getKpiSampleTypesCount() {
+        return kpiSampleTypes_.size();
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       * @return The deviceId.
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param index The index of the element to return.
+       * @return The kpiSampleTypes at the given index.
        */
-      public context.ContextOuterClass.DeviceId getDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
-        } else {
-          return deviceIdBuilder_.getMessage();
-        }
+      public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index) {
+        return kpiSampleTypes_converter_.convert(kpiSampleTypes_.get(index));
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param index The index to set the value at.
+       * @param value The kpiSampleTypes to set.
+       * @return This builder for chaining.
        */
-      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          deviceId_ = value;
-          onChanged();
-        } else {
-          deviceIdBuilder_.setMessage(value);
+      public Builder setKpiSampleTypes(
+          int index, kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
+        if (value == null) {
+          throw new NullPointerException();
         }
-
+        ensureKpiSampleTypesIsMutable();
+        kpiSampleTypes_.set(index, value.getNumber());
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param value The kpiSampleTypes to add.
+       * @return This builder for chaining.
        */
-      public Builder setDeviceId(
-          context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = builderForValue.build();
-          onChanged();
-        } else {
-          deviceIdBuilder_.setMessage(builderForValue.build());
+      public Builder addKpiSampleTypes(kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
+        if (value == null) {
+          throw new NullPointerException();
         }
-
+        ensureKpiSampleTypesIsMutable();
+        kpiSampleTypes_.add(value.getNumber());
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param values The kpiSampleTypes to add.
+       * @return This builder for chaining.
        */
-      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
-          if (deviceId_ != null) {
-            deviceId_ =
-              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
-          } else {
-            deviceId_ = value;
-          }
-          onChanged();
-        } else {
-          deviceIdBuilder_.mergeFrom(value);
+      public Builder addAllKpiSampleTypes(
+          java.lang.Iterable<? extends kpi_sample_types.KpiSampleTypes.KpiSampleType> values) {
+        ensureKpiSampleTypesIsMutable();
+        for (kpi_sample_types.KpiSampleTypes.KpiSampleType value : values) {
+          kpiSampleTypes_.add(value.getNumber());
         }
-
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @return This builder for chaining.
        */
-      public Builder clearDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
-          onChanged();
-        } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
-        }
-
+      public Builder clearKpiSampleTypes() {
+        kpiSampleTypes_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
        */
-      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
-        
+      public java.util.List<java.lang.Integer>
+      getKpiSampleTypesValueList() {
+        return java.util.Collections.unmodifiableList(kpiSampleTypes_);
+      }
+      /**
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
+       */
+      public int getKpiSampleTypesValue(int index) {
+        return kpiSampleTypes_.get(index);
+      }
+      /**
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
+       * @return This builder for chaining.
+       */
+      public Builder setKpiSampleTypesValue(
+          int index, int value) {
+        ensureKpiSampleTypesIsMutable();
+        kpiSampleTypes_.set(index, value);
         onChanged();
-        return getDeviceIdFieldBuilder().getBuilder();
+        return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param value The enum numeric value on the wire for kpiSampleTypes to add.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-        if (deviceIdBuilder_ != null) {
-          return deviceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return deviceId_ == null ?
-              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
-        }
+      public Builder addKpiSampleTypesValue(int value) {
+        ensureKpiSampleTypesIsMutable();
+        kpiSampleTypes_.add(value);
+        onChanged();
+        return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param values The enum numeric values on the wire for kpiSampleTypes to add.
+       * @return This builder for chaining.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
-          getDeviceIdFieldBuilder() {
-        if (deviceIdBuilder_ == null) {
-          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
-                  getDeviceId(),
-                  getParentForChildren(),
-                  isClean());
-          deviceId_ = null;
+      public Builder addAllKpiSampleTypesValue(
+          java.lang.Iterable<java.lang.Integer> values) {
+        ensureKpiSampleTypesIsMutable();
+        for (int value : values) {
+          kpiSampleTypes_.add(value);
         }
-        return deviceIdBuilder_;
+        onChanged();
+        return this;
       }
 
-      private context.ContextOuterClass.Uuid endpointUuid_;
+      private context.ContextOuterClass.Location endpointLocation_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> endpointUuidBuilder_;
+          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> endpointLocationBuilder_;
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
-       * @return Whether the endpointUuid field is set.
+       * <code>.context.Location endpoint_location = 4;</code>
+       * @return Whether the endpointLocation field is set.
        */
-      public boolean hasEndpointUuid() {
-        return endpointUuidBuilder_ != null || endpointUuid_ != null;
+      public boolean hasEndpointLocation() {
+        return endpointLocationBuilder_ != null || endpointLocation_ != null;
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
-       * @return The endpointUuid.
+       * <code>.context.Location endpoint_location = 4;</code>
+       * @return The endpointLocation.
        */
-      public context.ContextOuterClass.Uuid getEndpointUuid() {
-        if (endpointUuidBuilder_ == null) {
-          return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
+      public context.ContextOuterClass.Location getEndpointLocation() {
+        if (endpointLocationBuilder_ == null) {
+          return endpointLocation_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
         } else {
-          return endpointUuidBuilder_.getMessage();
+          return endpointLocationBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
        */
-      public Builder setEndpointUuid(context.ContextOuterClass.Uuid value) {
-        if (endpointUuidBuilder_ == null) {
+      public Builder setEndpointLocation(context.ContextOuterClass.Location value) {
+        if (endpointLocationBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          endpointUuid_ = value;
+          endpointLocation_ = value;
           onChanged();
         } else {
-          endpointUuidBuilder_.setMessage(value);
+          endpointLocationBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
        */
-      public Builder setEndpointUuid(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (endpointUuidBuilder_ == null) {
-          endpointUuid_ = builderForValue.build();
+      public Builder setEndpointLocation(
+          context.ContextOuterClass.Location.Builder builderForValue) {
+        if (endpointLocationBuilder_ == null) {
+          endpointLocation_ = builderForValue.build();
           onChanged();
         } else {
-          endpointUuidBuilder_.setMessage(builderForValue.build());
+          endpointLocationBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
        */
-      public Builder mergeEndpointUuid(context.ContextOuterClass.Uuid value) {
-        if (endpointUuidBuilder_ == null) {
-          if (endpointUuid_ != null) {
-            endpointUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(endpointUuid_).mergeFrom(value).buildPartial();
+      public Builder mergeEndpointLocation(context.ContextOuterClass.Location value) {
+        if (endpointLocationBuilder_ == null) {
+          if (endpointLocation_ != null) {
+            endpointLocation_ =
+              context.ContextOuterClass.Location.newBuilder(endpointLocation_).mergeFrom(value).buildPartial();
           } else {
-            endpointUuid_ = value;
+            endpointLocation_ = value;
           }
           onChanged();
         } else {
-          endpointUuidBuilder_.mergeFrom(value);
+          endpointLocationBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
        */
-      public Builder clearEndpointUuid() {
-        if (endpointUuidBuilder_ == null) {
-          endpointUuid_ = null;
+      public Builder clearEndpointLocation() {
+        if (endpointLocationBuilder_ == null) {
+          endpointLocation_ = null;
           onChanged();
         } else {
-          endpointUuid_ = null;
-          endpointUuidBuilder_ = null;
+          endpointLocation_ = null;
+          endpointLocationBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getEndpointUuidBuilder() {
+      public context.ContextOuterClass.Location.Builder getEndpointLocationBuilder() {
         
         onChanged();
-        return getEndpointUuidFieldBuilder().getBuilder();
+        return getEndpointLocationFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
-        if (endpointUuidBuilder_ != null) {
-          return endpointUuidBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder() {
+        if (endpointLocationBuilder_ != null) {
+          return endpointLocationBuilder_.getMessageOrBuilder();
         } else {
-          return endpointUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
+          return endpointLocation_ == null ?
+              context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
         }
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getEndpointUuidFieldBuilder() {
-        if (endpointUuidBuilder_ == null) {
-          endpointUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getEndpointUuid(),
+          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> 
+          getEndpointLocationFieldBuilder() {
+        if (endpointLocationBuilder_ == null) {
+          endpointLocationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder>(
+                  getEndpointLocation(),
                   getParentForChildren(),
                   isClean());
-          endpointUuid_ = null;
+          endpointLocation_ = null;
         }
-        return endpointUuidBuilder_;
+        return endpointLocationBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -46290,143 +48559,96 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.EndPointId)
+      // @@protoc_insertion_point(builder_scope:context.EndPoint)
     }
 
-    // @@protoc_insertion_point(class_scope:context.EndPointId)
-    private static final context.ContextOuterClass.EndPointId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.EndPoint)
+    private static final context.ContextOuterClass.EndPoint DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPointId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPoint();
     }
 
-    public static context.ContextOuterClass.EndPointId getDefaultInstance() {
+    public static context.ContextOuterClass.EndPoint getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<EndPointId>
-        PARSER = new com.google.protobuf.AbstractParser<EndPointId>() {
+    private static final com.google.protobuf.Parser<EndPoint>
+        PARSER = new com.google.protobuf.AbstractParser<EndPoint>() {
       @java.lang.Override
-      public EndPointId parsePartialFrom(
+      public EndPoint parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new EndPointId(input, extensionRegistry);
+        return new EndPoint(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<EndPointId> parser() {
+    public static com.google.protobuf.Parser<EndPoint> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<EndPointId> getParserForType() {
+    public com.google.protobuf.Parser<EndPoint> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
+    public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface EndPointOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.EndPoint)
+  public interface ConfigRule_CustomOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConfigRule_Custom)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return Whether the endpointId field is set.
-     */
-    boolean hasEndpointId();
-    /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return The endpointId.
-     */
-    context.ContextOuterClass.EndPointId getEndpointId();
-    /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     */
-    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
-
-    /**
-     * <code>string endpoint_type = 2;</code>
-     * @return The endpointType.
+     * <code>string resource_key = 1;</code>
+     * @return The resourceKey.
      */
-    java.lang.String getEndpointType();
+    java.lang.String getResourceKey();
     /**
-     * <code>string endpoint_type = 2;</code>
-     * @return The bytes for endpointType.
+     * <code>string resource_key = 1;</code>
+     * @return The bytes for resourceKey.
      */
     com.google.protobuf.ByteString
-        getEndpointTypeBytes();
-
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return A list containing the kpiSampleTypes.
-     */
-    java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList();
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return The count of kpiSampleTypes.
-     */
-    int getKpiSampleTypesCount();
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @param index The index of the element to return.
-     * @return The kpiSampleTypes at the given index.
-     */
-    kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index);
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
-     */
-    java.util.List<java.lang.Integer>
-    getKpiSampleTypesValueList();
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @param index The index of the value to return.
-     * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
-     */
-    int getKpiSampleTypesValue(int index);
+        getResourceKeyBytes();
 
     /**
-     * <code>.context.Location endpoint_location = 4;</code>
-     * @return Whether the endpointLocation field is set.
-     */
-    boolean hasEndpointLocation();
-    /**
-     * <code>.context.Location endpoint_location = 4;</code>
-     * @return The endpointLocation.
+     * <code>string resource_value = 2;</code>
+     * @return The resourceValue.
      */
-    context.ContextOuterClass.Location getEndpointLocation();
+    java.lang.String getResourceValue();
     /**
-     * <code>.context.Location endpoint_location = 4;</code>
+     * <code>string resource_value = 2;</code>
+     * @return The bytes for resourceValue.
      */
-    context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder();
+    com.google.protobuf.ByteString
+        getResourceValueBytes();
   }
   /**
-   * Protobuf type {@code context.EndPoint}
+   * Protobuf type {@code context.ConfigRule_Custom}
    */
-  public static final class EndPoint extends
+  public static final class ConfigRule_Custom extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.EndPoint)
-      EndPointOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConfigRule_Custom)
+      ConfigRule_CustomOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use EndPoint.newBuilder() to construct.
-    private EndPoint(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConfigRule_Custom.newBuilder() to construct.
+    private ConfigRule_Custom(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private EndPoint() {
-      endpointType_ = "";
-      kpiSampleTypes_ = java.util.Collections.emptyList();
+    private ConfigRule_Custom() {
+      resourceKey_ = "";
+      resourceValue_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new EndPoint();
+      return new ConfigRule_Custom();
     }
 
     @java.lang.Override
@@ -46434,7 +48656,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private EndPoint(
+    private ConfigRule_Custom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -46442,70 +48664,26 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            case 10: {
-              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
-              if (endpointId_ != null) {
-                subBuilder = endpointId_.toBuilder();
-              }
-              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(endpointId_);
-                endpointId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              endpointType_ = s;
-              break;
-            }
-            case 24: {
-              int rawValue = input.readEnum();
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              kpiSampleTypes_.add(rawValue);
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
               break;
-            }
-            case 26: {
-              int length = input.readRawVarint32();
-              int oldLimit = input.pushLimit(length);
-              while(input.getBytesUntilLimit() > 0) {
-                int rawValue = input.readEnum();
-                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                  kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>();
-                  mutable_bitField0_ |= 0x00000001;
-                }
-                kpiSampleTypes_.add(rawValue);
-              }
-              input.popLimit(oldLimit);
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              resourceKey_ = s;
               break;
             }
-            case 34: {
-              context.ContextOuterClass.Location.Builder subBuilder = null;
-              if (endpointLocation_ != null) {
-                subBuilder = endpointLocation_.toBuilder();
-              }
-              endpointLocation_ = input.readMessage(context.ContextOuterClass.Location.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(endpointLocation_);
-                endpointLocation_ = subBuilder.buildPartial();
-              }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
 
+              resourceValue_ = s;
               break;
             }
             default: {
@@ -46523,172 +48701,97 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          kpiSampleTypes_ = java.util.Collections.unmodifiableList(kpiSampleTypes_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_EndPoint_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
-    }
-
-    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.EndPointId endpointId_;
-    /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return Whether the endpointId field is set.
-     */
-    @java.lang.Override
-    public boolean hasEndpointId() {
-      return endpointId_ != null;
-    }
-    /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return The endpointId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EndPointId getEndpointId() {
-      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
-    }
-    /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-      return getEndpointId();
+              context.ContextOuterClass.ConfigRule_Custom.class, context.ContextOuterClass.ConfigRule_Custom.Builder.class);
     }
 
-    public static final int ENDPOINT_TYPE_FIELD_NUMBER = 2;
-    private volatile java.lang.Object endpointType_;
+    public static final int RESOURCE_KEY_FIELD_NUMBER = 1;
+    private volatile java.lang.Object resourceKey_;
     /**
-     * <code>string endpoint_type = 2;</code>
-     * @return The endpointType.
+     * <code>string resource_key = 1;</code>
+     * @return The resourceKey.
      */
     @java.lang.Override
-    public java.lang.String getEndpointType() {
-      java.lang.Object ref = endpointType_;
+    public java.lang.String getResourceKey() {
+      java.lang.Object ref = resourceKey_;
       if (ref instanceof java.lang.String) {
         return (java.lang.String) ref;
       } else {
         com.google.protobuf.ByteString bs = 
             (com.google.protobuf.ByteString) ref;
         java.lang.String s = bs.toStringUtf8();
-        endpointType_ = s;
+        resourceKey_ = s;
         return s;
       }
     }
     /**
-     * <code>string endpoint_type = 2;</code>
-     * @return The bytes for endpointType.
+     * <code>string resource_key = 1;</code>
+     * @return The bytes for resourceKey.
      */
     @java.lang.Override
     public com.google.protobuf.ByteString
-        getEndpointTypeBytes() {
-      java.lang.Object ref = endpointType_;
+        getResourceKeyBytes() {
+      java.lang.Object ref = resourceKey_;
       if (ref instanceof java.lang.String) {
         com.google.protobuf.ByteString b = 
             com.google.protobuf.ByteString.copyFromUtf8(
                 (java.lang.String) ref);
-        endpointType_ = b;
+        resourceKey_ = b;
         return b;
       } else {
         return (com.google.protobuf.ByteString) ref;
       }
     }
 
-    public static final int KPI_SAMPLE_TYPES_FIELD_NUMBER = 3;
-    private java.util.List<java.lang.Integer> kpiSampleTypes_;
-    private static final com.google.protobuf.Internal.ListAdapter.Converter<
-        java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType> kpiSampleTypes_converter_ =
-            new com.google.protobuf.Internal.ListAdapter.Converter<
-                java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>() {
-              public kpi_sample_types.KpiSampleTypes.KpiSampleType convert(java.lang.Integer from) {
-                @SuppressWarnings("deprecation")
-                kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(from);
-                return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
-              }
-            };
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return A list containing the kpiSampleTypes.
-     */
-    @java.lang.Override
-    public java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList() {
-      return new com.google.protobuf.Internal.ListAdapter<
-          java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>(kpiSampleTypes_, kpiSampleTypes_converter_);
-    }
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return The count of kpiSampleTypes.
-     */
-    @java.lang.Override
-    public int getKpiSampleTypesCount() {
-      return kpiSampleTypes_.size();
-    }
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @param index The index of the element to return.
-     * @return The kpiSampleTypes at the given index.
-     */
-    @java.lang.Override
-    public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index) {
-      return kpiSampleTypes_converter_.convert(kpiSampleTypes_.get(index));
-    }
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
-     */
-    @java.lang.Override
-    public java.util.List<java.lang.Integer>
-    getKpiSampleTypesValueList() {
-      return kpiSampleTypes_;
-    }
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @param index The index of the value to return.
-     * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
-     */
-    @java.lang.Override
-    public int getKpiSampleTypesValue(int index) {
-      return kpiSampleTypes_.get(index);
-    }
-    private int kpiSampleTypesMemoizedSerializedSize;
-
-    public static final int ENDPOINT_LOCATION_FIELD_NUMBER = 4;
-    private context.ContextOuterClass.Location endpointLocation_;
-    /**
-     * <code>.context.Location endpoint_location = 4;</code>
-     * @return Whether the endpointLocation field is set.
-     */
-    @java.lang.Override
-    public boolean hasEndpointLocation() {
-      return endpointLocation_ != null;
-    }
+    public static final int RESOURCE_VALUE_FIELD_NUMBER = 2;
+    private volatile java.lang.Object resourceValue_;
     /**
-     * <code>.context.Location endpoint_location = 4;</code>
-     * @return The endpointLocation.
+     * <code>string resource_value = 2;</code>
+     * @return The resourceValue.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Location getEndpointLocation() {
-      return endpointLocation_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
+    public java.lang.String getResourceValue() {
+      java.lang.Object ref = resourceValue_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        resourceValue_ = s;
+        return s;
+      }
     }
     /**
-     * <code>.context.Location endpoint_location = 4;</code>
+     * <code>string resource_value = 2;</code>
+     * @return The bytes for resourceValue.
      */
     @java.lang.Override
-    public context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder() {
-      return getEndpointLocation();
+    public com.google.protobuf.ByteString
+        getResourceValueBytes() {
+      java.lang.Object ref = resourceValue_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        resourceValue_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
     private byte memoizedIsInitialized = -1;
@@ -46705,22 +48808,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      getSerializedSize();
-      if (endpointId_ != null) {
-        output.writeMessage(1, getEndpointId());
-      }
-      if (!getEndpointTypeBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, endpointType_);
-      }
-      if (getKpiSampleTypesList().size() > 0) {
-        output.writeUInt32NoTag(26);
-        output.writeUInt32NoTag(kpiSampleTypesMemoizedSerializedSize);
-      }
-      for (int i = 0; i < kpiSampleTypes_.size(); i++) {
-        output.writeEnumNoTag(kpiSampleTypes_.get(i));
+      if (!getResourceKeyBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, resourceKey_);
       }
-      if (endpointLocation_ != null) {
-        output.writeMessage(4, getEndpointLocation());
+      if (!getResourceValueBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, resourceValue_);
       }
       unknownFields.writeTo(output);
     }
@@ -46731,28 +48823,11 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (endpointId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEndpointId());
-      }
-      if (!getEndpointTypeBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, endpointType_);
-      }
-      {
-        int dataSize = 0;
-        for (int i = 0; i < kpiSampleTypes_.size(); i++) {
-          dataSize += com.google.protobuf.CodedOutputStream
-            .computeEnumSizeNoTag(kpiSampleTypes_.get(i));
-        }
-        size += dataSize;
-        if (!getKpiSampleTypesList().isEmpty()) {  size += 1;
-          size += com.google.protobuf.CodedOutputStream
-            .computeUInt32SizeNoTag(dataSize);
-        }kpiSampleTypesMemoizedSerializedSize = dataSize;
+      if (!getResourceKeyBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, resourceKey_);
       }
-      if (endpointLocation_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, getEndpointLocation());
+      if (!getResourceValueBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, resourceValue_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -46760,28 +48835,19 @@ public final class ContextOuterClass {
     }
 
     @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof context.ContextOuterClass.EndPoint)) {
-        return super.equals(obj);
-      }
-      context.ContextOuterClass.EndPoint other = (context.ContextOuterClass.EndPoint) obj;
-
-      if (hasEndpointId() != other.hasEndpointId()) return false;
-      if (hasEndpointId()) {
-        if (!getEndpointId()
-            .equals(other.getEndpointId())) return false;
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
       }
-      if (!getEndpointType()
-          .equals(other.getEndpointType())) return false;
-      if (!kpiSampleTypes_.equals(other.kpiSampleTypes_)) return false;
-      if (hasEndpointLocation() != other.hasEndpointLocation()) return false;
-      if (hasEndpointLocation()) {
-        if (!getEndpointLocation()
-            .equals(other.getEndpointLocation())) return false;
+      if (!(obj instanceof context.ContextOuterClass.ConfigRule_Custom)) {
+        return super.equals(obj);
       }
+      context.ContextOuterClass.ConfigRule_Custom other = (context.ContextOuterClass.ConfigRule_Custom) obj;
+
+      if (!getResourceKey()
+          .equals(other.getResourceKey())) return false;
+      if (!getResourceValue()
+          .equals(other.getResourceValue())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -46793,88 +48859,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasEndpointId()) {
-        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getEndpointId().hashCode();
-      }
-      hash = (37 * hash) + ENDPOINT_TYPE_FIELD_NUMBER;
-      hash = (53 * hash) + getEndpointType().hashCode();
-      if (getKpiSampleTypesCount() > 0) {
-        hash = (37 * hash) + KPI_SAMPLE_TYPES_FIELD_NUMBER;
-        hash = (53 * hash) + kpiSampleTypes_.hashCode();
-      }
-      if (hasEndpointLocation()) {
-        hash = (37 * hash) + ENDPOINT_LOCATION_FIELD_NUMBER;
-        hash = (53 * hash) + getEndpointLocation().hashCode();
-      }
+      hash = (37 * hash) + RESOURCE_KEY_FIELD_NUMBER;
+      hash = (53 * hash) + getResourceKey().hashCode();
+      hash = (37 * hash) + RESOURCE_VALUE_FIELD_NUMBER;
+      hash = (53 * hash) + getResourceValue().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConfigRule_Custom parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPoint parseDelimitedFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -46887,7 +48943,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.EndPoint prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConfigRule_Custom prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -46903,26 +48959,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.EndPoint}
+     * Protobuf type {@code context.ConfigRule_Custom}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.EndPoint)
-        context.ContextOuterClass.EndPointOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConfigRule_Custom)
+        context.ContextOuterClass.ConfigRule_CustomOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_EndPoint_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
+                context.ContextOuterClass.ConfigRule_Custom.class, context.ContextOuterClass.ConfigRule_Custom.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.EndPoint.newBuilder()
+      // Construct using context.ContextOuterClass.ConfigRule_Custom.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -46940,39 +48996,27 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = null;
-        } else {
-          endpointId_ = null;
-          endpointIdBuilder_ = null;
-        }
-        endpointType_ = "";
+        resourceKey_ = "";
+
+        resourceValue_ = "";
 
-        kpiSampleTypes_ = java.util.Collections.emptyList();
-        bitField0_ = (bitField0_ & ~0x00000001);
-        if (endpointLocationBuilder_ == null) {
-          endpointLocation_ = null;
-        } else {
-          endpointLocation_ = null;
-          endpointLocationBuilder_ = null;
-        }
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
-        return context.ContextOuterClass.EndPoint.getDefaultInstance();
+      public context.ContextOuterClass.ConfigRule_Custom getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPoint build() {
-        context.ContextOuterClass.EndPoint result = buildPartial();
+      public context.ContextOuterClass.ConfigRule_Custom build() {
+        context.ContextOuterClass.ConfigRule_Custom result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -46980,25 +49024,10 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPoint buildPartial() {
-        context.ContextOuterClass.EndPoint result = new context.ContextOuterClass.EndPoint(this);
-        int from_bitField0_ = bitField0_;
-        if (endpointIdBuilder_ == null) {
-          result.endpointId_ = endpointId_;
-        } else {
-          result.endpointId_ = endpointIdBuilder_.build();
-        }
-        result.endpointType_ = endpointType_;
-        if (((bitField0_ & 0x00000001) != 0)) {
-          kpiSampleTypes_ = java.util.Collections.unmodifiableList(kpiSampleTypes_);
-          bitField0_ = (bitField0_ & ~0x00000001);
-        }
-        result.kpiSampleTypes_ = kpiSampleTypes_;
-        if (endpointLocationBuilder_ == null) {
-          result.endpointLocation_ = endpointLocation_;
-        } else {
-          result.endpointLocation_ = endpointLocationBuilder_.build();
-        }
+      public context.ContextOuterClass.ConfigRule_Custom buildPartial() {
+        context.ContextOuterClass.ConfigRule_Custom result = new context.ContextOuterClass.ConfigRule_Custom(this);
+        result.resourceKey_ = resourceKey_;
+        result.resourceValue_ = resourceValue_;
         onBuilt();
         return result;
       }
@@ -47031,524 +49060,209 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.EndPoint) {
-          return mergeFrom((context.ContextOuterClass.EndPoint)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(context.ContextOuterClass.EndPoint other) {
-        if (other == context.ContextOuterClass.EndPoint.getDefaultInstance()) return this;
-        if (other.hasEndpointId()) {
-          mergeEndpointId(other.getEndpointId());
-        }
-        if (!other.getEndpointType().isEmpty()) {
-          endpointType_ = other.endpointType_;
-          onChanged();
-        }
-        if (!other.kpiSampleTypes_.isEmpty()) {
-          if (kpiSampleTypes_.isEmpty()) {
-            kpiSampleTypes_ = other.kpiSampleTypes_;
-            bitField0_ = (bitField0_ & ~0x00000001);
-          } else {
-            ensureKpiSampleTypesIsMutable();
-            kpiSampleTypes_.addAll(other.kpiSampleTypes_);
-          }
-          onChanged();
-        }
-        if (other.hasEndpointLocation()) {
-          mergeEndpointLocation(other.getEndpointLocation());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.EndPoint parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.EndPoint) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private context.ContextOuterClass.EndPointId endpointId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       * @return Whether the endpointId field is set.
-       */
-      public boolean hasEndpointId() {
-        return endpointIdBuilder_ != null || endpointId_ != null;
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       * @return The endpointId.
-       */
-      public context.ContextOuterClass.EndPointId getEndpointId() {
-        if (endpointIdBuilder_ == null) {
-          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
-        } else {
-          return endpointIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
-        if (endpointIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          endpointId_ = value;
-          onChanged();
-        } else {
-          endpointIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      public Builder setEndpointId(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = builderForValue.build();
-          onChanged();
-        } else {
-          endpointIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
-        if (endpointIdBuilder_ == null) {
-          if (endpointId_ != null) {
-            endpointId_ =
-              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
-          } else {
-            endpointId_ = value;
-          }
-          onChanged();
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ConfigRule_Custom) {
+          return mergeFrom((context.ContextOuterClass.ConfigRule_Custom)other);
         } else {
-          endpointIdBuilder_.mergeFrom(value);
+          super.mergeFrom(other);
+          return this;
         }
-
-        return this;
       }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      public Builder clearEndpointId() {
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = null;
+
+      public Builder mergeFrom(context.ContextOuterClass.ConfigRule_Custom other) {
+        if (other == context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance()) return this;
+        if (!other.getResourceKey().isEmpty()) {
+          resourceKey_ = other.resourceKey_;
           onChanged();
-        } else {
-          endpointId_ = null;
-          endpointIdBuilder_ = null;
         }
-
-        return this;
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
-        
+        if (!other.getResourceValue().isEmpty()) {
+          resourceValue_ = other.resourceValue_;
+          onChanged();
+        }
+        this.mergeUnknownFields(other.unknownFields);
         onChanged();
-        return getEndpointIdFieldBuilder().getBuilder();
+        return this;
       }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-        if (endpointIdBuilder_ != null) {
-          return endpointIdBuilder_.getMessageOrBuilder();
-        } else {
-          return endpointId_ == null ?
-              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
-        }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getEndpointIdFieldBuilder() {
-        if (endpointIdBuilder_ == null) {
-          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  getEndpointId(),
-                  getParentForChildren(),
-                  isClean());
-          endpointId_ = null;
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ConfigRule_Custom parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ConfigRule_Custom) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
         }
-        return endpointIdBuilder_;
+        return this;
       }
 
-      private java.lang.Object endpointType_ = "";
+      private java.lang.Object resourceKey_ = "";
       /**
-       * <code>string endpoint_type = 2;</code>
-       * @return The endpointType.
+       * <code>string resource_key = 1;</code>
+       * @return The resourceKey.
        */
-      public java.lang.String getEndpointType() {
-        java.lang.Object ref = endpointType_;
+      public java.lang.String getResourceKey() {
+        java.lang.Object ref = resourceKey_;
         if (!(ref instanceof java.lang.String)) {
           com.google.protobuf.ByteString bs =
               (com.google.protobuf.ByteString) ref;
           java.lang.String s = bs.toStringUtf8();
-          endpointType_ = s;
+          resourceKey_ = s;
           return s;
         } else {
           return (java.lang.String) ref;
         }
       }
       /**
-       * <code>string endpoint_type = 2;</code>
-       * @return The bytes for endpointType.
+       * <code>string resource_key = 1;</code>
+       * @return The bytes for resourceKey.
        */
       public com.google.protobuf.ByteString
-          getEndpointTypeBytes() {
-        java.lang.Object ref = endpointType_;
+          getResourceKeyBytes() {
+        java.lang.Object ref = resourceKey_;
         if (ref instanceof String) {
           com.google.protobuf.ByteString b = 
               com.google.protobuf.ByteString.copyFromUtf8(
                   (java.lang.String) ref);
-          endpointType_ = b;
+          resourceKey_ = b;
           return b;
         } else {
           return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>string endpoint_type = 2;</code>
-       * @param value The endpointType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setEndpointType(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        endpointType_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string endpoint_type = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearEndpointType() {
-        
-        endpointType_ = getDefaultInstance().getEndpointType();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string endpoint_type = 2;</code>
-       * @param value The bytes for endpointType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setEndpointTypeBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        endpointType_ = value;
-        onChanged();
-        return this;
-      }
-
-      private java.util.List<java.lang.Integer> kpiSampleTypes_ =
-        java.util.Collections.emptyList();
-      private void ensureKpiSampleTypesIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>(kpiSampleTypes_);
-          bitField0_ |= 0x00000001;
-        }
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @return A list containing the kpiSampleTypes.
-       */
-      public java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList() {
-        return new com.google.protobuf.Internal.ListAdapter<
-            java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>(kpiSampleTypes_, kpiSampleTypes_converter_);
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @return The count of kpiSampleTypes.
-       */
-      public int getKpiSampleTypesCount() {
-        return kpiSampleTypes_.size();
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param index The index of the element to return.
-       * @return The kpiSampleTypes at the given index.
-       */
-      public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index) {
-        return kpiSampleTypes_converter_.convert(kpiSampleTypes_.get(index));
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param index The index to set the value at.
-       * @param value The kpiSampleTypes to set.
-       * @return This builder for chaining.
-       */
-      public Builder setKpiSampleTypes(
-          int index, kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        ensureKpiSampleTypesIsMutable();
-        kpiSampleTypes_.set(index, value.getNumber());
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param value The kpiSampleTypes to add.
-       * @return This builder for chaining.
-       */
-      public Builder addKpiSampleTypes(kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        ensureKpiSampleTypesIsMutable();
-        kpiSampleTypes_.add(value.getNumber());
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param values The kpiSampleTypes to add.
-       * @return This builder for chaining.
-       */
-      public Builder addAllKpiSampleTypes(
-          java.lang.Iterable<? extends kpi_sample_types.KpiSampleTypes.KpiSampleType> values) {
-        ensureKpiSampleTypesIsMutable();
-        for (kpi_sample_types.KpiSampleTypes.KpiSampleType value : values) {
-          kpiSampleTypes_.add(value.getNumber());
-        }
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearKpiSampleTypes() {
-        kpiSampleTypes_ = java.util.Collections.emptyList();
-        bitField0_ = (bitField0_ & ~0x00000001);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
-       */
-      public java.util.List<java.lang.Integer>
-      getKpiSampleTypesValueList() {
-        return java.util.Collections.unmodifiableList(kpiSampleTypes_);
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param index The index of the value to return.
-       * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
-       */
-      public int getKpiSampleTypesValue(int index) {
-        return kpiSampleTypes_.get(index);
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param index The index of the value to return.
-       * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
+       * <code>string resource_key = 1;</code>
+       * @param value The resourceKey to set.
        * @return This builder for chaining.
        */
-      public Builder setKpiSampleTypesValue(
-          int index, int value) {
-        ensureKpiSampleTypesIsMutable();
-        kpiSampleTypes_.set(index, value);
+      public Builder setResourceKey(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        resourceKey_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param value The enum numeric value on the wire for kpiSampleTypes to add.
+       * <code>string resource_key = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder addKpiSampleTypesValue(int value) {
-        ensureKpiSampleTypesIsMutable();
-        kpiSampleTypes_.add(value);
+      public Builder clearResourceKey() {
+        
+        resourceKey_ = getDefaultInstance().getResourceKey();
         onChanged();
         return this;
       }
       /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param values The enum numeric values on the wire for kpiSampleTypes to add.
+       * <code>string resource_key = 1;</code>
+       * @param value The bytes for resourceKey to set.
        * @return This builder for chaining.
        */
-      public Builder addAllKpiSampleTypesValue(
-          java.lang.Iterable<java.lang.Integer> values) {
-        ensureKpiSampleTypesIsMutable();
-        for (int value : values) {
-          kpiSampleTypes_.add(value);
-        }
+      public Builder setResourceKeyBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        resourceKey_ = value;
         onChanged();
         return this;
       }
 
-      private context.ContextOuterClass.Location endpointLocation_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> endpointLocationBuilder_;
-      /**
-       * <code>.context.Location endpoint_location = 4;</code>
-       * @return Whether the endpointLocation field is set.
-       */
-      public boolean hasEndpointLocation() {
-        return endpointLocationBuilder_ != null || endpointLocation_ != null;
-      }
-      /**
-       * <code>.context.Location endpoint_location = 4;</code>
-       * @return The endpointLocation.
-       */
-      public context.ContextOuterClass.Location getEndpointLocation() {
-        if (endpointLocationBuilder_ == null) {
-          return endpointLocation_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
-        } else {
-          return endpointLocationBuilder_.getMessage();
-        }
-      }
+      private java.lang.Object resourceValue_ = "";
       /**
-       * <code>.context.Location endpoint_location = 4;</code>
+       * <code>string resource_value = 2;</code>
+       * @return The resourceValue.
        */
-      public Builder setEndpointLocation(context.ContextOuterClass.Location value) {
-        if (endpointLocationBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          endpointLocation_ = value;
-          onChanged();
+      public java.lang.String getResourceValue() {
+        java.lang.Object ref = resourceValue_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          resourceValue_ = s;
+          return s;
         } else {
-          endpointLocationBuilder_.setMessage(value);
+          return (java.lang.String) ref;
         }
-
-        return this;
       }
       /**
-       * <code>.context.Location endpoint_location = 4;</code>
+       * <code>string resource_value = 2;</code>
+       * @return The bytes for resourceValue.
        */
-      public Builder setEndpointLocation(
-          context.ContextOuterClass.Location.Builder builderForValue) {
-        if (endpointLocationBuilder_ == null) {
-          endpointLocation_ = builderForValue.build();
-          onChanged();
+      public com.google.protobuf.ByteString
+          getResourceValueBytes() {
+        java.lang.Object ref = resourceValue_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          resourceValue_ = b;
+          return b;
         } else {
-          endpointLocationBuilder_.setMessage(builderForValue.build());
+          return (com.google.protobuf.ByteString) ref;
         }
-
-        return this;
       }
       /**
-       * <code>.context.Location endpoint_location = 4;</code>
+       * <code>string resource_value = 2;</code>
+       * @param value The resourceValue to set.
+       * @return This builder for chaining.
        */
-      public Builder mergeEndpointLocation(context.ContextOuterClass.Location value) {
-        if (endpointLocationBuilder_ == null) {
-          if (endpointLocation_ != null) {
-            endpointLocation_ =
-              context.ContextOuterClass.Location.newBuilder(endpointLocation_).mergeFrom(value).buildPartial();
-          } else {
-            endpointLocation_ = value;
-          }
-          onChanged();
-        } else {
-          endpointLocationBuilder_.mergeFrom(value);
-        }
-
+      public Builder setResourceValue(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        resourceValue_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.Location endpoint_location = 4;</code>
+       * <code>string resource_value = 2;</code>
+       * @return This builder for chaining.
        */
-      public Builder clearEndpointLocation() {
-        if (endpointLocationBuilder_ == null) {
-          endpointLocation_ = null;
-          onChanged();
-        } else {
-          endpointLocation_ = null;
-          endpointLocationBuilder_ = null;
-        }
-
+      public Builder clearResourceValue() {
+        
+        resourceValue_ = getDefaultInstance().getResourceValue();
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.Location endpoint_location = 4;</code>
+       * <code>string resource_value = 2;</code>
+       * @param value The bytes for resourceValue to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.Location.Builder getEndpointLocationBuilder() {
+      public Builder setResourceValueBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
         
+        resourceValue_ = value;
         onChanged();
-        return getEndpointLocationFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.Location endpoint_location = 4;</code>
-       */
-      public context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder() {
-        if (endpointLocationBuilder_ != null) {
-          return endpointLocationBuilder_.getMessageOrBuilder();
-        } else {
-          return endpointLocation_ == null ?
-              context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
-        }
-      }
-      /**
-       * <code>.context.Location endpoint_location = 4;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> 
-          getEndpointLocationFieldBuilder() {
-        if (endpointLocationBuilder_ == null) {
-          endpointLocationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder>(
-                  getEndpointLocation(),
-                  getParentForChildren(),
-                  isClean());
-          endpointLocation_ = null;
-        }
-        return endpointLocationBuilder_;
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -47563,96 +49277,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.EndPoint)
+      // @@protoc_insertion_point(builder_scope:context.ConfigRule_Custom)
     }
 
-    // @@protoc_insertion_point(class_scope:context.EndPoint)
-    private static final context.ContextOuterClass.EndPoint DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConfigRule_Custom)
+    private static final context.ContextOuterClass.ConfigRule_Custom DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPoint();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule_Custom();
     }
 
-    public static context.ContextOuterClass.EndPoint getDefaultInstance() {
+    public static context.ContextOuterClass.ConfigRule_Custom getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<EndPoint>
-        PARSER = new com.google.protobuf.AbstractParser<EndPoint>() {
+    private static final com.google.protobuf.Parser<ConfigRule_Custom>
+        PARSER = new com.google.protobuf.AbstractParser<ConfigRule_Custom>() {
       @java.lang.Override
-      public EndPoint parsePartialFrom(
+      public ConfigRule_Custom parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new EndPoint(input, extensionRegistry);
+        return new ConfigRule_Custom(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<EndPoint> parser() {
+    public static com.google.protobuf.Parser<ConfigRule_Custom> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<EndPoint> getParserForType() {
+    public com.google.protobuf.Parser<ConfigRule_Custom> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConfigRule_Custom getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConfigRule_CustomOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConfigRule_Custom)
+  public interface ConfigRule_ACLOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConfigRule_ACL)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>string resource_key = 1;</code>
-     * @return The resourceKey.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
-    java.lang.String getResourceKey();
+    boolean hasEndpointId();
     /**
-     * <code>string resource_key = 1;</code>
-     * @return The bytes for resourceKey.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
-    com.google.protobuf.ByteString
-        getResourceKeyBytes();
+    context.ContextOuterClass.EndPointId getEndpointId();
+    /**
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
 
     /**
-     * <code>string resource_value = 2;</code>
-     * @return The resourceValue.
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     * @return Whether the ruleSet field is set.
      */
-    java.lang.String getResourceValue();
+    boolean hasRuleSet();
     /**
-     * <code>string resource_value = 2;</code>
-     * @return The bytes for resourceValue.
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     * @return The ruleSet.
      */
-    com.google.protobuf.ByteString
-        getResourceValueBytes();
+    acl.Acl.AclRuleSet getRuleSet();
+    /**
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     */
+    acl.Acl.AclRuleSetOrBuilder getRuleSetOrBuilder();
   }
   /**
-   * Protobuf type {@code context.ConfigRule_Custom}
+   * Protobuf type {@code context.ConfigRule_ACL}
    */
-  public static final class ConfigRule_Custom extends
+  public static final class ConfigRule_ACL extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConfigRule_Custom)
-      ConfigRule_CustomOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConfigRule_ACL)
+      ConfigRule_ACLOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConfigRule_Custom.newBuilder() to construct.
-    private ConfigRule_Custom(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConfigRule_ACL.newBuilder() to construct.
+    private ConfigRule_ACL(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConfigRule_Custom() {
-      resourceKey_ = "";
-      resourceValue_ = "";
+    private ConfigRule_ACL() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConfigRule_Custom();
+      return new ConfigRule_ACL();
     }
 
     @java.lang.Override
@@ -47660,7 +49378,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConfigRule_Custom(
+    private ConfigRule_ACL(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -47679,15 +49397,29 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              java.lang.String s = input.readStringRequireUtf8();
+              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
+              if (endpointId_ != null) {
+                subBuilder = endpointId_.toBuilder();
+              }
+              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endpointId_);
+                endpointId_ = subBuilder.buildPartial();
+              }
 
-              resourceKey_ = s;
               break;
             }
             case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
+              acl.Acl.AclRuleSet.Builder subBuilder = null;
+              if (ruleSet_ != null) {
+                subBuilder = ruleSet_.toBuilder();
+              }
+              ruleSet_ = input.readMessage(acl.Acl.AclRuleSet.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(ruleSet_);
+                ruleSet_ = subBuilder.buildPartial();
+              }
 
-              resourceValue_ = s;
               break;
             }
             default: {
@@ -47711,91 +49443,67 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConfigRule_Custom.class, context.ContextOuterClass.ConfigRule_Custom.Builder.class);
+              context.ContextOuterClass.ConfigRule_ACL.class, context.ContextOuterClass.ConfigRule_ACL.Builder.class);
     }
 
-    public static final int RESOURCE_KEY_FIELD_NUMBER = 1;
-    private volatile java.lang.Object resourceKey_;
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.EndPointId endpointId_;
     /**
-     * <code>string resource_key = 1;</code>
-     * @return The resourceKey.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
     @java.lang.Override
-    public java.lang.String getResourceKey() {
-      java.lang.Object ref = resourceKey_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        resourceKey_ = s;
-        return s;
-      }
+    public boolean hasEndpointId() {
+      return endpointId_ != null;
     }
     /**
-     * <code>string resource_key = 1;</code>
-     * @return The bytes for resourceKey.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getResourceKeyBytes() {
-      java.lang.Object ref = resourceKey_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        resourceKey_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public context.ContextOuterClass.EndPointId getEndpointId() {
+      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+    }
+    /**
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+      return getEndpointId();
     }
 
-    public static final int RESOURCE_VALUE_FIELD_NUMBER = 2;
-    private volatile java.lang.Object resourceValue_;
+    public static final int RULE_SET_FIELD_NUMBER = 2;
+    private acl.Acl.AclRuleSet ruleSet_;
     /**
-     * <code>string resource_value = 2;</code>
-     * @return The resourceValue.
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     * @return Whether the ruleSet field is set.
      */
     @java.lang.Override
-    public java.lang.String getResourceValue() {
-      java.lang.Object ref = resourceValue_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        resourceValue_ = s;
-        return s;
-      }
+    public boolean hasRuleSet() {
+      return ruleSet_ != null;
     }
     /**
-     * <code>string resource_value = 2;</code>
-     * @return The bytes for resourceValue.
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     * @return The ruleSet.
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getResourceValueBytes() {
-      java.lang.Object ref = resourceValue_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        resourceValue_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public acl.Acl.AclRuleSet getRuleSet() {
+      return ruleSet_ == null ? acl.Acl.AclRuleSet.getDefaultInstance() : ruleSet_;
+    }
+    /**
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     */
+    @java.lang.Override
+    public acl.Acl.AclRuleSetOrBuilder getRuleSetOrBuilder() {
+      return getRuleSet();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -47812,11 +49520,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (!getResourceKeyBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, resourceKey_);
+      if (endpointId_ != null) {
+        output.writeMessage(1, getEndpointId());
       }
-      if (!getResourceValueBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, resourceValue_);
+      if (ruleSet_ != null) {
+        output.writeMessage(2, getRuleSet());
       }
       unknownFields.writeTo(output);
     }
@@ -47827,11 +49535,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (!getResourceKeyBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, resourceKey_);
+      if (endpointId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getEndpointId());
       }
-      if (!getResourceValueBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, resourceValue_);
+      if (ruleSet_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getRuleSet());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -47843,15 +49553,21 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConfigRule_Custom)) {
+      if (!(obj instanceof context.ContextOuterClass.ConfigRule_ACL)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConfigRule_Custom other = (context.ContextOuterClass.ConfigRule_Custom) obj;
+      context.ContextOuterClass.ConfigRule_ACL other = (context.ContextOuterClass.ConfigRule_ACL) obj;
 
-      if (!getResourceKey()
-          .equals(other.getResourceKey())) return false;
-      if (!getResourceValue()
-          .equals(other.getResourceValue())) return false;
+      if (hasEndpointId() != other.hasEndpointId()) return false;
+      if (hasEndpointId()) {
+        if (!getEndpointId()
+            .equals(other.getEndpointId())) return false;
+      }
+      if (hasRuleSet() != other.hasRuleSet()) return false;
+      if (hasRuleSet()) {
+        if (!getRuleSet()
+            .equals(other.getRuleSet())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -47863,78 +49579,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + RESOURCE_KEY_FIELD_NUMBER;
-      hash = (53 * hash) + getResourceKey().hashCode();
-      hash = (37 * hash) + RESOURCE_VALUE_FIELD_NUMBER;
-      hash = (53 * hash) + getResourceValue().hashCode();
+      if (hasEndpointId()) {
+        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointId().hashCode();
+      }
+      if (hasRuleSet()) {
+        hash = (37 * hash) + RULE_SET_FIELD_NUMBER;
+        hash = (53 * hash) + getRuleSet().hashCode();
+      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConfigRule_ACL parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseDelimitedFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -47947,7 +49667,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConfigRule_Custom prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConfigRule_ACL prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -47963,26 +49683,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConfigRule_Custom}
+     * Protobuf type {@code context.ConfigRule_ACL}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConfigRule_Custom)
-        context.ContextOuterClass.ConfigRule_CustomOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConfigRule_ACL)
+        context.ContextOuterClass.ConfigRule_ACLOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConfigRule_Custom.class, context.ContextOuterClass.ConfigRule_Custom.Builder.class);
+                context.ContextOuterClass.ConfigRule_ACL.class, context.ContextOuterClass.ConfigRule_ACL.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConfigRule_Custom.newBuilder()
+      // Construct using context.ContextOuterClass.ConfigRule_ACL.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -48000,38 +49720,54 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        resourceKey_ = "";
-
-        resourceValue_ = "";
-
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+        if (ruleSetBuilder_ == null) {
+          ruleSet_ = null;
+        } else {
+          ruleSet_ = null;
+          ruleSetBuilder_ = null;
+        }
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_Custom getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
+      public context.ContextOuterClass.ConfigRule_ACL getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_Custom build() {
-        context.ContextOuterClass.ConfigRule_Custom result = buildPartial();
+      public context.ContextOuterClass.ConfigRule_ACL build() {
+        context.ContextOuterClass.ConfigRule_ACL result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
-        return result;
-      }
-
-      @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_Custom buildPartial() {
-        context.ContextOuterClass.ConfigRule_Custom result = new context.ContextOuterClass.ConfigRule_Custom(this);
-        result.resourceKey_ = resourceKey_;
-        result.resourceValue_ = resourceValue_;
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule_ACL buildPartial() {
+        context.ContextOuterClass.ConfigRule_ACL result = new context.ContextOuterClass.ConfigRule_ACL(this);
+        if (endpointIdBuilder_ == null) {
+          result.endpointId_ = endpointId_;
+        } else {
+          result.endpointId_ = endpointIdBuilder_.build();
+        }
+        if (ruleSetBuilder_ == null) {
+          result.ruleSet_ = ruleSet_;
+        } else {
+          result.ruleSet_ = ruleSetBuilder_.build();
+        }
         onBuilt();
         return result;
       }
@@ -48070,23 +49806,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConfigRule_Custom) {
-          return mergeFrom((context.ContextOuterClass.ConfigRule_Custom)other);
+        if (other instanceof context.ContextOuterClass.ConfigRule_ACL) {
+          return mergeFrom((context.ContextOuterClass.ConfigRule_ACL)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConfigRule_Custom other) {
-        if (other == context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance()) return this;
-        if (!other.getResourceKey().isEmpty()) {
-          resourceKey_ = other.resourceKey_;
-          onChanged();
+      public Builder mergeFrom(context.ContextOuterClass.ConfigRule_ACL other) {
+        if (other == context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance()) return this;
+        if (other.hasEndpointId()) {
+          mergeEndpointId(other.getEndpointId());
         }
-        if (!other.getResourceValue().isEmpty()) {
-          resourceValue_ = other.resourceValue_;
-          onChanged();
+        if (other.hasRuleSet()) {
+          mergeRuleSet(other.getRuleSet());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -48103,11 +49837,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConfigRule_Custom parsedMessage = null;
+        context.ContextOuterClass.ConfigRule_ACL parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConfigRule_Custom) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConfigRule_ACL) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -48117,156 +49851,242 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private java.lang.Object resourceKey_ = "";
+      private context.ContextOuterClass.EndPointId endpointId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
       /**
-       * <code>string resource_key = 1;</code>
-       * @return The resourceKey.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return Whether the endpointId field is set.
        */
-      public java.lang.String getResourceKey() {
-        java.lang.Object ref = resourceKey_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          resourceKey_ = s;
-          return s;
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return The endpointId.
+       */
+      public context.ContextOuterClass.EndPointId getEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         } else {
-          return (java.lang.String) ref;
+          return endpointIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>string resource_key = 1;</code>
-       * @return The bytes for resourceKey.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public com.google.protobuf.ByteString
-          getResourceKeyBytes() {
-        java.lang.Object ref = resourceKey_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          resourceKey_ = b;
-          return b;
+      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          endpointId_ = value;
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          endpointIdBuilder_.setMessage(value);
         }
+
+        return this;
       }
       /**
-       * <code>string resource_key = 1;</code>
-       * @param value The resourceKey to set.
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setResourceKey(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        resourceKey_ = value;
-        onChanged();
+      public Builder setEndpointId(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = builderForValue.build();
+          onChanged();
+        } else {
+          endpointIdBuilder_.setMessage(builderForValue.build());
+        }
+
         return this;
       }
       /**
-       * <code>string resource_key = 1;</code>
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder clearResourceKey() {
-        
-        resourceKey_ = getDefaultInstance().getResourceKey();
-        onChanged();
+      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (endpointId_ != null) {
+            endpointId_ =
+              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+          } else {
+            endpointId_ = value;
+          }
+          onChanged();
+        } else {
+          endpointIdBuilder_.mergeFrom(value);
+        }
+
         return this;
       }
       /**
-       * <code>string resource_key = 1;</code>
-       * @param value The bytes for resourceKey to set.
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setResourceKeyBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+          onChanged();
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
         
-        resourceKey_ = value;
         onChanged();
+        return getEndpointIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+        if (endpointIdBuilder_ != null) {
+          return endpointIdBuilder_.getMessageOrBuilder();
+        } else {
+          return endpointId_ == null ?
+              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        }
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getEndpointIdFieldBuilder() {
+        if (endpointIdBuilder_ == null) {
+          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  getEndpointId(),
+                  getParentForChildren(),
+                  isClean());
+          endpointId_ = null;
+        }
+        return endpointIdBuilder_;
+      }
+
+      private acl.Acl.AclRuleSet ruleSet_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          acl.Acl.AclRuleSet, acl.Acl.AclRuleSet.Builder, acl.Acl.AclRuleSetOrBuilder> ruleSetBuilder_;
+      /**
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * @return Whether the ruleSet field is set.
+       */
+      public boolean hasRuleSet() {
+        return ruleSetBuilder_ != null || ruleSet_ != null;
+      }
+      /**
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * @return The ruleSet.
+       */
+      public acl.Acl.AclRuleSet getRuleSet() {
+        if (ruleSetBuilder_ == null) {
+          return ruleSet_ == null ? acl.Acl.AclRuleSet.getDefaultInstance() : ruleSet_;
+        } else {
+          return ruleSetBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       */
+      public Builder setRuleSet(acl.Acl.AclRuleSet value) {
+        if (ruleSetBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ruleSet_ = value;
+          onChanged();
+        } else {
+          ruleSetBuilder_.setMessage(value);
+        }
+
         return this;
       }
+      /**
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       */
+      public Builder setRuleSet(
+          acl.Acl.AclRuleSet.Builder builderForValue) {
+        if (ruleSetBuilder_ == null) {
+          ruleSet_ = builderForValue.build();
+          onChanged();
+        } else {
+          ruleSetBuilder_.setMessage(builderForValue.build());
+        }
 
-      private java.lang.Object resourceValue_ = "";
+        return this;
+      }
       /**
-       * <code>string resource_value = 2;</code>
-       * @return The resourceValue.
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
        */
-      public java.lang.String getResourceValue() {
-        java.lang.Object ref = resourceValue_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          resourceValue_ = s;
-          return s;
+      public Builder mergeRuleSet(acl.Acl.AclRuleSet value) {
+        if (ruleSetBuilder_ == null) {
+          if (ruleSet_ != null) {
+            ruleSet_ =
+              acl.Acl.AclRuleSet.newBuilder(ruleSet_).mergeFrom(value).buildPartial();
+          } else {
+            ruleSet_ = value;
+          }
+          onChanged();
         } else {
-          return (java.lang.String) ref;
+          ruleSetBuilder_.mergeFrom(value);
         }
+
+        return this;
       }
       /**
-       * <code>string resource_value = 2;</code>
-       * @return The bytes for resourceValue.
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
        */
-      public com.google.protobuf.ByteString
-          getResourceValueBytes() {
-        java.lang.Object ref = resourceValue_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          resourceValue_ = b;
-          return b;
+      public Builder clearRuleSet() {
+        if (ruleSetBuilder_ == null) {
+          ruleSet_ = null;
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          ruleSet_ = null;
+          ruleSetBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>string resource_value = 2;</code>
-       * @param value The resourceValue to set.
-       * @return This builder for chaining.
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
        */
-      public Builder setResourceValue(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        resourceValue_ = value;
+      public acl.Acl.AclRuleSet.Builder getRuleSetBuilder() {
+        
         onChanged();
-        return this;
+        return getRuleSetFieldBuilder().getBuilder();
       }
       /**
-       * <code>string resource_value = 2;</code>
-       * @return This builder for chaining.
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
        */
-      public Builder clearResourceValue() {
-        
-        resourceValue_ = getDefaultInstance().getResourceValue();
-        onChanged();
-        return this;
+      public acl.Acl.AclRuleSetOrBuilder getRuleSetOrBuilder() {
+        if (ruleSetBuilder_ != null) {
+          return ruleSetBuilder_.getMessageOrBuilder();
+        } else {
+          return ruleSet_ == null ?
+              acl.Acl.AclRuleSet.getDefaultInstance() : ruleSet_;
+        }
       }
       /**
-       * <code>string resource_value = 2;</code>
-       * @param value The bytes for resourceValue to set.
-       * @return This builder for chaining.
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
        */
-      public Builder setResourceValueBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        resourceValue_ = value;
-        onChanged();
-        return this;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          acl.Acl.AclRuleSet, acl.Acl.AclRuleSet.Builder, acl.Acl.AclRuleSetOrBuilder> 
+          getRuleSetFieldBuilder() {
+        if (ruleSetBuilder_ == null) {
+          ruleSetBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              acl.Acl.AclRuleSet, acl.Acl.AclRuleSet.Builder, acl.Acl.AclRuleSetOrBuilder>(
+                  getRuleSet(),
+                  getParentForChildren(),
+                  isClean());
+          ruleSet_ = null;
+        }
+        return ruleSetBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -48281,100 +50101,114 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConfigRule_Custom)
+      // @@protoc_insertion_point(builder_scope:context.ConfigRule_ACL)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConfigRule_Custom)
-    private static final context.ContextOuterClass.ConfigRule_Custom DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConfigRule_ACL)
+    private static final context.ContextOuterClass.ConfigRule_ACL DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule_Custom();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule_ACL();
     }
 
-    public static context.ContextOuterClass.ConfigRule_Custom getDefaultInstance() {
+    public static context.ContextOuterClass.ConfigRule_ACL getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConfigRule_Custom>
-        PARSER = new com.google.protobuf.AbstractParser<ConfigRule_Custom>() {
+    private static final com.google.protobuf.Parser<ConfigRule_ACL>
+        PARSER = new com.google.protobuf.AbstractParser<ConfigRule_ACL>() {
       @java.lang.Override
-      public ConfigRule_Custom parsePartialFrom(
+      public ConfigRule_ACL parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConfigRule_Custom(input, extensionRegistry);
+        return new ConfigRule_ACL(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConfigRule_Custom> parser() {
+    public static com.google.protobuf.Parser<ConfigRule_ACL> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConfigRule_Custom> getParserForType() {
+    public com.google.protobuf.Parser<ConfigRule_ACL> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule_Custom getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConfigRule_ACL getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConfigRule_ACLOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConfigRule_ACL)
+  public interface ConfigRuleOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConfigRule)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return Whether the endpointId field is set.
+     * <code>.context.ConfigActionEnum action = 1;</code>
+     * @return The enum numeric value on the wire for action.
      */
-    boolean hasEndpointId();
+    int getActionValue();
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return The endpointId.
+     * <code>.context.ConfigActionEnum action = 1;</code>
+     * @return The action.
      */
-    context.ContextOuterClass.EndPointId getEndpointId();
+    context.ContextOuterClass.ConfigActionEnum getAction();
+
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     * @return Whether the custom field is set.
      */
-    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
+    boolean hasCustom();
+    /**
+     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     * @return The custom.
+     */
+    context.ContextOuterClass.ConfigRule_Custom getCustom();
+    /**
+     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     */
+    context.ContextOuterClass.ConfigRule_CustomOrBuilder getCustomOrBuilder();
 
     /**
-     * <code>.acl.AclRuleSet rule_set = 2;</code>
-     * @return Whether the ruleSet field is set.
+     * <code>.context.ConfigRule_ACL acl = 3;</code>
+     * @return Whether the acl field is set.
      */
-    boolean hasRuleSet();
+    boolean hasAcl();
     /**
-     * <code>.acl.AclRuleSet rule_set = 2;</code>
-     * @return The ruleSet.
+     * <code>.context.ConfigRule_ACL acl = 3;</code>
+     * @return The acl.
      */
-    acl.Acl.AclRuleSet getRuleSet();
+    context.ContextOuterClass.ConfigRule_ACL getAcl();
     /**
-     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     * <code>.context.ConfigRule_ACL acl = 3;</code>
      */
-    acl.Acl.AclRuleSetOrBuilder getRuleSetOrBuilder();
+    context.ContextOuterClass.ConfigRule_ACLOrBuilder getAclOrBuilder();
+
+    public context.ContextOuterClass.ConfigRule.ConfigRuleCase getConfigRuleCase();
   }
   /**
-   * Protobuf type {@code context.ConfigRule_ACL}
+   * Protobuf type {@code context.ConfigRule}
    */
-  public static final class ConfigRule_ACL extends
+  public static final class ConfigRule extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConfigRule_ACL)
-      ConfigRule_ACLOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConfigRule)
+      ConfigRuleOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConfigRule_ACL.newBuilder() to construct.
-    private ConfigRule_ACL(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConfigRule.newBuilder() to construct.
+    private ConfigRule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConfigRule_ACL() {
+    private ConfigRule() {
+      action_ = 0;
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConfigRule_ACL();
+      return new ConfigRule();
     }
 
     @java.lang.Override
@@ -48382,7 +50216,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConfigRule_ACL(
+    private ConfigRule(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -48400,30 +50234,38 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 10: {
-              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
-              if (endpointId_ != null) {
-                subBuilder = endpointId_.toBuilder();
+            case 8: {
+              int rawValue = input.readEnum();
+
+              action_ = rawValue;
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.ConfigRule_Custom.Builder subBuilder = null;
+              if (configRuleCase_ == 2) {
+                subBuilder = ((context.ContextOuterClass.ConfigRule_Custom) configRule_).toBuilder();
               }
-              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+              configRule_ =
+                  input.readMessage(context.ContextOuterClass.ConfigRule_Custom.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(endpointId_);
-                endpointId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom((context.ContextOuterClass.ConfigRule_Custom) configRule_);
+                configRule_ = subBuilder.buildPartial();
               }
-
+              configRuleCase_ = 2;
               break;
             }
-            case 18: {
-              acl.Acl.AclRuleSet.Builder subBuilder = null;
-              if (ruleSet_ != null) {
-                subBuilder = ruleSet_.toBuilder();
+            case 26: {
+              context.ContextOuterClass.ConfigRule_ACL.Builder subBuilder = null;
+              if (configRuleCase_ == 3) {
+                subBuilder = ((context.ContextOuterClass.ConfigRule_ACL) configRule_).toBuilder();
               }
-              ruleSet_ = input.readMessage(acl.Acl.AclRuleSet.parser(), extensionRegistry);
+              configRule_ =
+                  input.readMessage(context.ContextOuterClass.ConfigRule_ACL.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(ruleSet_);
-                ruleSet_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom((context.ContextOuterClass.ConfigRule_ACL) configRule_);
+                configRule_ = subBuilder.buildPartial();
               }
-
+              configRuleCase_ = 3;
               break;
             }
             default: {
@@ -48435,79 +50277,149 @@ public final class ContextOuterClass {
             }
           }
         }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ConfigRule_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ConfigRule.class, context.ContextOuterClass.ConfigRule.Builder.class);
+    }
+
+    private int configRuleCase_ = 0;
+    private java.lang.Object configRule_;
+    public enum ConfigRuleCase
+        implements com.google.protobuf.Internal.EnumLite,
+            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+      CUSTOM(2),
+      ACL(3),
+      CONFIGRULE_NOT_SET(0);
+      private final int value;
+      private ConfigRuleCase(int value) {
+        this.value = value;
+      }
+      /**
+       * @param value The number of the enum to look for.
+       * @return The enum associated with the given number.
+       * @deprecated Use {@link #forNumber(int)} instead.
+       */
+      @java.lang.Deprecated
+      public static ConfigRuleCase valueOf(int value) {
+        return forNumber(value);
+      }
+
+      public static ConfigRuleCase forNumber(int value) {
+        switch (value) {
+          case 2: return CUSTOM;
+          case 3: return ACL;
+          case 0: return CONFIGRULE_NOT_SET;
+          default: return null;
+        }
       }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_descriptor;
+      public int getNumber() {
+        return this.value;
+      }
+    };
+
+    public ConfigRuleCase
+    getConfigRuleCase() {
+      return ConfigRuleCase.forNumber(
+          configRuleCase_);
     }
 
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConfigRule_ACL.class, context.ContextOuterClass.ConfigRule_ACL.Builder.class);
+    public static final int ACTION_FIELD_NUMBER = 1;
+    private int action_;
+    /**
+     * <code>.context.ConfigActionEnum action = 1;</code>
+     * @return The enum numeric value on the wire for action.
+     */
+    @java.lang.Override public int getActionValue() {
+      return action_;
+    }
+    /**
+     * <code>.context.ConfigActionEnum action = 1;</code>
+     * @return The action.
+     */
+    @java.lang.Override public context.ContextOuterClass.ConfigActionEnum getAction() {
+      @SuppressWarnings("deprecation")
+      context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.valueOf(action_);
+      return result == null ? context.ContextOuterClass.ConfigActionEnum.UNRECOGNIZED : result;
     }
 
-    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.EndPointId endpointId_;
+    public static final int CUSTOM_FIELD_NUMBER = 2;
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return Whether the endpointId field is set.
+     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     * @return Whether the custom field is set.
      */
     @java.lang.Override
-    public boolean hasEndpointId() {
-      return endpointId_ != null;
+    public boolean hasCustom() {
+      return configRuleCase_ == 2;
     }
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return The endpointId.
+     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     * @return The custom.
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPointId getEndpointId() {
-      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+    public context.ContextOuterClass.ConfigRule_Custom getCustom() {
+      if (configRuleCase_ == 2) {
+         return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
+      }
+      return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
     }
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * <code>.context.ConfigRule_Custom custom = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-      return getEndpointId();
+    public context.ContextOuterClass.ConfigRule_CustomOrBuilder getCustomOrBuilder() {
+      if (configRuleCase_ == 2) {
+         return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
+      }
+      return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
     }
 
-    public static final int RULE_SET_FIELD_NUMBER = 2;
-    private acl.Acl.AclRuleSet ruleSet_;
+    public static final int ACL_FIELD_NUMBER = 3;
     /**
-     * <code>.acl.AclRuleSet rule_set = 2;</code>
-     * @return Whether the ruleSet field is set.
+     * <code>.context.ConfigRule_ACL acl = 3;</code>
+     * @return Whether the acl field is set.
      */
     @java.lang.Override
-    public boolean hasRuleSet() {
-      return ruleSet_ != null;
+    public boolean hasAcl() {
+      return configRuleCase_ == 3;
     }
     /**
-     * <code>.acl.AclRuleSet rule_set = 2;</code>
-     * @return The ruleSet.
+     * <code>.context.ConfigRule_ACL acl = 3;</code>
+     * @return The acl.
      */
     @java.lang.Override
-    public acl.Acl.AclRuleSet getRuleSet() {
-      return ruleSet_ == null ? acl.Acl.AclRuleSet.getDefaultInstance() : ruleSet_;
+    public context.ContextOuterClass.ConfigRule_ACL getAcl() {
+      if (configRuleCase_ == 3) {
+         return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
+      }
+      return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
     }
     /**
-     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     * <code>.context.ConfigRule_ACL acl = 3;</code>
      */
     @java.lang.Override
-    public acl.Acl.AclRuleSetOrBuilder getRuleSetOrBuilder() {
-      return getRuleSet();
+    public context.ContextOuterClass.ConfigRule_ACLOrBuilder getAclOrBuilder() {
+      if (configRuleCase_ == 3) {
+         return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
+      }
+      return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -48524,11 +50436,14 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (endpointId_ != null) {
-        output.writeMessage(1, getEndpointId());
+      if (action_ != context.ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED.getNumber()) {
+        output.writeEnum(1, action_);
       }
-      if (ruleSet_ != null) {
-        output.writeMessage(2, getRuleSet());
+      if (configRuleCase_ == 2) {
+        output.writeMessage(2, (context.ContextOuterClass.ConfigRule_Custom) configRule_);
+      }
+      if (configRuleCase_ == 3) {
+        output.writeMessage(3, (context.ContextOuterClass.ConfigRule_ACL) configRule_);
       }
       unknownFields.writeTo(output);
     }
@@ -48539,13 +50454,17 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (endpointId_ != null) {
+      if (action_ != context.ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED.getNumber()) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEndpointId());
+          .computeEnumSize(1, action_);
       }
-      if (ruleSet_ != null) {
+      if (configRuleCase_ == 2) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getRuleSet());
+          .computeMessageSize(2, (context.ContextOuterClass.ConfigRule_Custom) configRule_);
+      }
+      if (configRuleCase_ == 3) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, (context.ContextOuterClass.ConfigRule_ACL) configRule_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -48557,20 +50476,24 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConfigRule_ACL)) {
+      if (!(obj instanceof context.ContextOuterClass.ConfigRule)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConfigRule_ACL other = (context.ContextOuterClass.ConfigRule_ACL) obj;
+      context.ContextOuterClass.ConfigRule other = (context.ContextOuterClass.ConfigRule) obj;
 
-      if (hasEndpointId() != other.hasEndpointId()) return false;
-      if (hasEndpointId()) {
-        if (!getEndpointId()
-            .equals(other.getEndpointId())) return false;
-      }
-      if (hasRuleSet() != other.hasRuleSet()) return false;
-      if (hasRuleSet()) {
-        if (!getRuleSet()
-            .equals(other.getRuleSet())) return false;
+      if (action_ != other.action_) return false;
+      if (!getConfigRuleCase().equals(other.getConfigRuleCase())) return false;
+      switch (configRuleCase_) {
+        case 2:
+          if (!getCustom()
+              .equals(other.getCustom())) return false;
+          break;
+        case 3:
+          if (!getAcl()
+              .equals(other.getAcl())) return false;
+          break;
+        case 0:
+        default:
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -48583,82 +50506,88 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasEndpointId()) {
-        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getEndpointId().hashCode();
-      }
-      if (hasRuleSet()) {
-        hash = (37 * hash) + RULE_SET_FIELD_NUMBER;
-        hash = (53 * hash) + getRuleSet().hashCode();
+      hash = (37 * hash) + ACTION_FIELD_NUMBER;
+      hash = (53 * hash) + action_;
+      switch (configRuleCase_) {
+        case 2:
+          hash = (37 * hash) + CUSTOM_FIELD_NUMBER;
+          hash = (53 * hash) + getCustom().hashCode();
+          break;
+        case 3:
+          hash = (37 * hash) + ACL_FIELD_NUMBER;
+          hash = (53 * hash) + getAcl().hashCode();
+          break;
+        case 0:
+        default:
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConfigRule parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConfigRule parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConfigRule parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseDelimitedFrom(
+    public static context.ContextOuterClass.ConfigRule parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -48671,7 +50600,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConfigRule_ACL prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConfigRule prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -48687,26 +50616,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConfigRule_ACL}
+     * Protobuf type {@code context.ConfigRule}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConfigRule_ACL)
-        context.ContextOuterClass.ConfigRule_ACLOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConfigRule)
+        context.ContextOuterClass.ConfigRuleOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConfigRule_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConfigRule_ACL.class, context.ContextOuterClass.ConfigRule_ACL.Builder.class);
+                context.ContextOuterClass.ConfigRule.class, context.ContextOuterClass.ConfigRule.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConfigRule_ACL.newBuilder()
+      // Construct using context.ContextOuterClass.ConfigRule.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -48724,54 +50653,52 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = null;
-        } else {
-          endpointId_ = null;
-          endpointIdBuilder_ = null;
-        }
-        if (ruleSetBuilder_ == null) {
-          ruleSet_ = null;
-        } else {
-          ruleSet_ = null;
-          ruleSetBuilder_ = null;
-        }
+        action_ = 0;
+
+        configRuleCase_ = 0;
+        configRule_ = null;
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_ACL getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
+      public context.ContextOuterClass.ConfigRule getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConfigRule.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_ACL build() {
-        context.ContextOuterClass.ConfigRule_ACL result = buildPartial();
+      public context.ContextOuterClass.ConfigRule build() {
+        context.ContextOuterClass.ConfigRule result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
-      }
-
-      @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_ACL buildPartial() {
-        context.ContextOuterClass.ConfigRule_ACL result = new context.ContextOuterClass.ConfigRule_ACL(this);
-        if (endpointIdBuilder_ == null) {
-          result.endpointId_ = endpointId_;
-        } else {
-          result.endpointId_ = endpointIdBuilder_.build();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule buildPartial() {
+        context.ContextOuterClass.ConfigRule result = new context.ContextOuterClass.ConfigRule(this);
+        result.action_ = action_;
+        if (configRuleCase_ == 2) {
+          if (customBuilder_ == null) {
+            result.configRule_ = configRule_;
+          } else {
+            result.configRule_ = customBuilder_.build();
+          }
         }
-        if (ruleSetBuilder_ == null) {
-          result.ruleSet_ = ruleSet_;
-        } else {
-          result.ruleSet_ = ruleSetBuilder_.build();
+        if (configRuleCase_ == 3) {
+          if (aclBuilder_ == null) {
+            result.configRule_ = configRule_;
+          } else {
+            result.configRule_ = aclBuilder_.build();
+          }
         }
+        result.configRuleCase_ = configRuleCase_;
         onBuilt();
         return result;
       }
@@ -48810,21 +50737,31 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConfigRule_ACL) {
-          return mergeFrom((context.ContextOuterClass.ConfigRule_ACL)other);
+        if (other instanceof context.ContextOuterClass.ConfigRule) {
+          return mergeFrom((context.ContextOuterClass.ConfigRule)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConfigRule_ACL other) {
-        if (other == context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance()) return this;
-        if (other.hasEndpointId()) {
-          mergeEndpointId(other.getEndpointId());
+      public Builder mergeFrom(context.ContextOuterClass.ConfigRule other) {
+        if (other == context.ContextOuterClass.ConfigRule.getDefaultInstance()) return this;
+        if (other.action_ != 0) {
+          setActionValue(other.getActionValue());
         }
-        if (other.hasRuleSet()) {
-          mergeRuleSet(other.getRuleSet());
+        switch (other.getConfigRuleCase()) {
+          case CUSTOM: {
+            mergeCustom(other.getCustom());
+            break;
+          }
+          case ACL: {
+            mergeAcl(other.getAcl());
+            break;
+          }
+          case CONFIGRULE_NOT_SET: {
+            break;
+          }
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -48841,11 +50778,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConfigRule_ACL parsedMessage = null;
+        context.ContextOuterClass.ConfigRule parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConfigRule_ACL) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConfigRule) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -48854,243 +50791,356 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int configRuleCase_ = 0;
+      private java.lang.Object configRule_;
+      public ConfigRuleCase
+          getConfigRuleCase() {
+        return ConfigRuleCase.forNumber(
+            configRuleCase_);
+      }
+
+      public Builder clearConfigRule() {
+        configRuleCase_ = 0;
+        configRule_ = null;
+        onChanged();
+        return this;
+      }
+
+
+      private int action_ = 0;
+      /**
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @return The enum numeric value on the wire for action.
+       */
+      @java.lang.Override public int getActionValue() {
+        return action_;
+      }
+      /**
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @param value The enum numeric value on the wire for action to set.
+       * @return This builder for chaining.
+       */
+      public Builder setActionValue(int value) {
+        
+        action_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @return The action.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigActionEnum getAction() {
+        @SuppressWarnings("deprecation")
+        context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.valueOf(action_);
+        return result == null ? context.ContextOuterClass.ConfigActionEnum.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @param value The action to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAction(context.ContextOuterClass.ConfigActionEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        action_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAction() {
+        
+        action_ = 0;
+        onChanged();
+        return this;
+      }
 
-      private context.ContextOuterClass.EndPointId endpointId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
+          context.ContextOuterClass.ConfigRule_Custom, context.ContextOuterClass.ConfigRule_Custom.Builder, context.ContextOuterClass.ConfigRule_CustomOrBuilder> customBuilder_;
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       * @return Whether the endpointId field is set.
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
+       * @return Whether the custom field is set.
        */
-      public boolean hasEndpointId() {
-        return endpointIdBuilder_ != null || endpointId_ != null;
+      @java.lang.Override
+      public boolean hasCustom() {
+        return configRuleCase_ == 2;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       * @return The endpointId.
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
+       * @return The custom.
        */
-      public context.ContextOuterClass.EndPointId getEndpointId() {
-        if (endpointIdBuilder_ == null) {
-          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule_Custom getCustom() {
+        if (customBuilder_ == null) {
+          if (configRuleCase_ == 2) {
+            return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
+          }
+          return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
         } else {
-          return endpointIdBuilder_.getMessage();
+          if (configRuleCase_ == 2) {
+            return customBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
        */
-      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
-        if (endpointIdBuilder_ == null) {
+      public Builder setCustom(context.ContextOuterClass.ConfigRule_Custom value) {
+        if (customBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          endpointId_ = value;
+          configRule_ = value;
           onChanged();
         } else {
-          endpointIdBuilder_.setMessage(value);
+          customBuilder_.setMessage(value);
         }
-
+        configRuleCase_ = 2;
         return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
        */
-      public Builder setEndpointId(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = builderForValue.build();
+      public Builder setCustom(
+          context.ContextOuterClass.ConfigRule_Custom.Builder builderForValue) {
+        if (customBuilder_ == null) {
+          configRule_ = builderForValue.build();
           onChanged();
         } else {
-          endpointIdBuilder_.setMessage(builderForValue.build());
+          customBuilder_.setMessage(builderForValue.build());
         }
-
+        configRuleCase_ = 2;
         return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
        */
-      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
-        if (endpointIdBuilder_ == null) {
-          if (endpointId_ != null) {
-            endpointId_ =
-              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+      public Builder mergeCustom(context.ContextOuterClass.ConfigRule_Custom value) {
+        if (customBuilder_ == null) {
+          if (configRuleCase_ == 2 &&
+              configRule_ != context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance()) {
+            configRule_ = context.ContextOuterClass.ConfigRule_Custom.newBuilder((context.ContextOuterClass.ConfigRule_Custom) configRule_)
+                .mergeFrom(value).buildPartial();
           } else {
-            endpointId_ = value;
+            configRule_ = value;
           }
           onChanged();
         } else {
-          endpointIdBuilder_.mergeFrom(value);
+          if (configRuleCase_ == 2) {
+            customBuilder_.mergeFrom(value);
+          }
+          customBuilder_.setMessage(value);
         }
-
+        configRuleCase_ = 2;
         return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
        */
-      public Builder clearEndpointId() {
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = null;
-          onChanged();
+      public Builder clearCustom() {
+        if (customBuilder_ == null) {
+          if (configRuleCase_ == 2) {
+            configRuleCase_ = 0;
+            configRule_ = null;
+            onChanged();
+          }
         } else {
-          endpointId_ = null;
-          endpointIdBuilder_ = null;
+          if (configRuleCase_ == 2) {
+            configRuleCase_ = 0;
+            configRule_ = null;
+          }
+          customBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
-        
-        onChanged();
-        return getEndpointIdFieldBuilder().getBuilder();
+      public context.ContextOuterClass.ConfigRule_Custom.Builder getCustomBuilder() {
+        return getCustomFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
        */
-      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-        if (endpointIdBuilder_ != null) {
-          return endpointIdBuilder_.getMessageOrBuilder();
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule_CustomOrBuilder getCustomOrBuilder() {
+        if ((configRuleCase_ == 2) && (customBuilder_ != null)) {
+          return customBuilder_.getMessageOrBuilder();
         } else {
-          return endpointId_ == null ?
-              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+          if (configRuleCase_ == 2) {
+            return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
+          }
+          return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
         }
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getEndpointIdFieldBuilder() {
-        if (endpointIdBuilder_ == null) {
-          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  getEndpointId(),
+      }
+      /**
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConfigRule_Custom, context.ContextOuterClass.ConfigRule_Custom.Builder, context.ContextOuterClass.ConfigRule_CustomOrBuilder> 
+          getCustomFieldBuilder() {
+        if (customBuilder_ == null) {
+          if (!(configRuleCase_ == 2)) {
+            configRule_ = context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
+          }
+          customBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConfigRule_Custom, context.ContextOuterClass.ConfigRule_Custom.Builder, context.ContextOuterClass.ConfigRule_CustomOrBuilder>(
+                  (context.ContextOuterClass.ConfigRule_Custom) configRule_,
                   getParentForChildren(),
                   isClean());
-          endpointId_ = null;
+          configRule_ = null;
         }
-        return endpointIdBuilder_;
+        configRuleCase_ = 2;
+        onChanged();;
+        return customBuilder_;
       }
 
-      private acl.Acl.AclRuleSet ruleSet_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          acl.Acl.AclRuleSet, acl.Acl.AclRuleSet.Builder, acl.Acl.AclRuleSetOrBuilder> ruleSetBuilder_;
+          context.ContextOuterClass.ConfigRule_ACL, context.ContextOuterClass.ConfigRule_ACL.Builder, context.ContextOuterClass.ConfigRule_ACLOrBuilder> aclBuilder_;
       /**
-       * <code>.acl.AclRuleSet rule_set = 2;</code>
-       * @return Whether the ruleSet field is set.
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       * @return Whether the acl field is set.
        */
-      public boolean hasRuleSet() {
-        return ruleSetBuilder_ != null || ruleSet_ != null;
+      @java.lang.Override
+      public boolean hasAcl() {
+        return configRuleCase_ == 3;
       }
       /**
-       * <code>.acl.AclRuleSet rule_set = 2;</code>
-       * @return The ruleSet.
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       * @return The acl.
        */
-      public acl.Acl.AclRuleSet getRuleSet() {
-        if (ruleSetBuilder_ == null) {
-          return ruleSet_ == null ? acl.Acl.AclRuleSet.getDefaultInstance() : ruleSet_;
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule_ACL getAcl() {
+        if (aclBuilder_ == null) {
+          if (configRuleCase_ == 3) {
+            return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
+          }
+          return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
         } else {
-          return ruleSetBuilder_.getMessage();
+          if (configRuleCase_ == 3) {
+            return aclBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
         }
       }
       /**
-       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
-      public Builder setRuleSet(acl.Acl.AclRuleSet value) {
-        if (ruleSetBuilder_ == null) {
+      public Builder setAcl(context.ContextOuterClass.ConfigRule_ACL value) {
+        if (aclBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ruleSet_ = value;
+          configRule_ = value;
           onChanged();
         } else {
-          ruleSetBuilder_.setMessage(value);
+          aclBuilder_.setMessage(value);
         }
-
+        configRuleCase_ = 3;
         return this;
       }
       /**
-       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
-      public Builder setRuleSet(
-          acl.Acl.AclRuleSet.Builder builderForValue) {
-        if (ruleSetBuilder_ == null) {
-          ruleSet_ = builderForValue.build();
+      public Builder setAcl(
+          context.ContextOuterClass.ConfigRule_ACL.Builder builderForValue) {
+        if (aclBuilder_ == null) {
+          configRule_ = builderForValue.build();
           onChanged();
         } else {
-          ruleSetBuilder_.setMessage(builderForValue.build());
+          aclBuilder_.setMessage(builderForValue.build());
         }
-
+        configRuleCase_ = 3;
         return this;
       }
       /**
-       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
-      public Builder mergeRuleSet(acl.Acl.AclRuleSet value) {
-        if (ruleSetBuilder_ == null) {
-          if (ruleSet_ != null) {
-            ruleSet_ =
-              acl.Acl.AclRuleSet.newBuilder(ruleSet_).mergeFrom(value).buildPartial();
+      public Builder mergeAcl(context.ContextOuterClass.ConfigRule_ACL value) {
+        if (aclBuilder_ == null) {
+          if (configRuleCase_ == 3 &&
+              configRule_ != context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance()) {
+            configRule_ = context.ContextOuterClass.ConfigRule_ACL.newBuilder((context.ContextOuterClass.ConfigRule_ACL) configRule_)
+                .mergeFrom(value).buildPartial();
           } else {
-            ruleSet_ = value;
+            configRule_ = value;
           }
           onChanged();
         } else {
-          ruleSetBuilder_.mergeFrom(value);
+          if (configRuleCase_ == 3) {
+            aclBuilder_.mergeFrom(value);
+          }
+          aclBuilder_.setMessage(value);
         }
-
+        configRuleCase_ = 3;
         return this;
       }
       /**
-       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
-      public Builder clearRuleSet() {
-        if (ruleSetBuilder_ == null) {
-          ruleSet_ = null;
-          onChanged();
+      public Builder clearAcl() {
+        if (aclBuilder_ == null) {
+          if (configRuleCase_ == 3) {
+            configRuleCase_ = 0;
+            configRule_ = null;
+            onChanged();
+          }
         } else {
-          ruleSet_ = null;
-          ruleSetBuilder_ = null;
+          if (configRuleCase_ == 3) {
+            configRuleCase_ = 0;
+            configRule_ = null;
+          }
+          aclBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
-      public acl.Acl.AclRuleSet.Builder getRuleSetBuilder() {
-        
-        onChanged();
-        return getRuleSetFieldBuilder().getBuilder();
+      public context.ContextOuterClass.ConfigRule_ACL.Builder getAclBuilder() {
+        return getAclFieldBuilder().getBuilder();
       }
       /**
-       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
-      public acl.Acl.AclRuleSetOrBuilder getRuleSetOrBuilder() {
-        if (ruleSetBuilder_ != null) {
-          return ruleSetBuilder_.getMessageOrBuilder();
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule_ACLOrBuilder getAclOrBuilder() {
+        if ((configRuleCase_ == 3) && (aclBuilder_ != null)) {
+          return aclBuilder_.getMessageOrBuilder();
         } else {
-          return ruleSet_ == null ?
-              acl.Acl.AclRuleSet.getDefaultInstance() : ruleSet_;
+          if (configRuleCase_ == 3) {
+            return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
+          }
+          return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
         }
       }
       /**
-       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          acl.Acl.AclRuleSet, acl.Acl.AclRuleSet.Builder, acl.Acl.AclRuleSetOrBuilder> 
-          getRuleSetFieldBuilder() {
-        if (ruleSetBuilder_ == null) {
-          ruleSetBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              acl.Acl.AclRuleSet, acl.Acl.AclRuleSet.Builder, acl.Acl.AclRuleSetOrBuilder>(
-                  getRuleSet(),
+          context.ContextOuterClass.ConfigRule_ACL, context.ContextOuterClass.ConfigRule_ACL.Builder, context.ContextOuterClass.ConfigRule_ACLOrBuilder> 
+          getAclFieldBuilder() {
+        if (aclBuilder_ == null) {
+          if (!(configRuleCase_ == 3)) {
+            configRule_ = context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
+          }
+          aclBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConfigRule_ACL, context.ContextOuterClass.ConfigRule_ACL.Builder, context.ContextOuterClass.ConfigRule_ACLOrBuilder>(
+                  (context.ContextOuterClass.ConfigRule_ACL) configRule_,
                   getParentForChildren(),
                   isClean());
-          ruleSet_ = null;
+          configRule_ = null;
         }
-        return ruleSetBuilder_;
+        configRuleCase_ = 3;
+        onChanged();;
+        return aclBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -49105,114 +51155,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConfigRule_ACL)
+      // @@protoc_insertion_point(builder_scope:context.ConfigRule)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConfigRule_ACL)
-    private static final context.ContextOuterClass.ConfigRule_ACL DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConfigRule)
+    private static final context.ContextOuterClass.ConfigRule DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule_ACL();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule();
     }
 
-    public static context.ContextOuterClass.ConfigRule_ACL getDefaultInstance() {
+    public static context.ContextOuterClass.ConfigRule getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConfigRule_ACL>
-        PARSER = new com.google.protobuf.AbstractParser<ConfigRule_ACL>() {
+    private static final com.google.protobuf.Parser<ConfigRule>
+        PARSER = new com.google.protobuf.AbstractParser<ConfigRule>() {
       @java.lang.Override
-      public ConfigRule_ACL parsePartialFrom(
+      public ConfigRule parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConfigRule_ACL(input, extensionRegistry);
+        return new ConfigRule(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConfigRule_ACL> parser() {
+    public static com.google.protobuf.Parser<ConfigRule> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConfigRule_ACL> getParserForType() {
+    public com.google.protobuf.Parser<ConfigRule> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule_ACL getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConfigRule getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConfigRuleOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConfigRule)
+  public interface Constraint_CustomOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_Custom)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.ConfigActionEnum action = 1;</code>
-     * @return The enum numeric value on the wire for action.
-     */
-    int getActionValue();
-    /**
-     * <code>.context.ConfigActionEnum action = 1;</code>
-     * @return The action.
-     */
-    context.ContextOuterClass.ConfigActionEnum getAction();
-
-    /**
-     * <code>.context.ConfigRule_Custom custom = 2;</code>
-     * @return Whether the custom field is set.
-     */
-    boolean hasCustom();
-    /**
-     * <code>.context.ConfigRule_Custom custom = 2;</code>
-     * @return The custom.
+     * <code>string constraint_type = 1;</code>
+     * @return The constraintType.
      */
-    context.ContextOuterClass.ConfigRule_Custom getCustom();
+    java.lang.String getConstraintType();
     /**
-     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     * <code>string constraint_type = 1;</code>
+     * @return The bytes for constraintType.
      */
-    context.ContextOuterClass.ConfigRule_CustomOrBuilder getCustomOrBuilder();
+    com.google.protobuf.ByteString
+        getConstraintTypeBytes();
 
     /**
-     * <code>.context.ConfigRule_ACL acl = 3;</code>
-     * @return Whether the acl field is set.
-     */
-    boolean hasAcl();
-    /**
-     * <code>.context.ConfigRule_ACL acl = 3;</code>
-     * @return The acl.
+     * <code>string constraint_value = 2;</code>
+     * @return The constraintValue.
      */
-    context.ContextOuterClass.ConfigRule_ACL getAcl();
+    java.lang.String getConstraintValue();
     /**
-     * <code>.context.ConfigRule_ACL acl = 3;</code>
+     * <code>string constraint_value = 2;</code>
+     * @return The bytes for constraintValue.
      */
-    context.ContextOuterClass.ConfigRule_ACLOrBuilder getAclOrBuilder();
-
-    public context.ContextOuterClass.ConfigRule.ConfigRuleCase getConfigRuleCase();
+    com.google.protobuf.ByteString
+        getConstraintValueBytes();
   }
   /**
-   * Protobuf type {@code context.ConfigRule}
+   * <pre>
+   * ----- Constraint ----------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.Constraint_Custom}
    */
-  public static final class ConfigRule extends
+  public static final class Constraint_Custom extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConfigRule)
-      ConfigRuleOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use ConfigRule.newBuilder() to construct.
-    private ConfigRule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      // @@protoc_insertion_point(message_implements:context.Constraint_Custom)
+      Constraint_CustomOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Constraint_Custom.newBuilder() to construct.
+    private Constraint_Custom(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConfigRule() {
-      action_ = 0;
+    private Constraint_Custom() {
+      constraintType_ = "";
+      constraintValue_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConfigRule();
+      return new Constraint_Custom();
     }
 
     @java.lang.Override
@@ -49220,7 +51256,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConfigRule(
+    private Constraint_Custom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -49238,38 +51274,16 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 8: {
-              int rawValue = input.readEnum();
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
 
-              action_ = rawValue;
+              constraintType_ = s;
               break;
             }
             case 18: {
-              context.ContextOuterClass.ConfigRule_Custom.Builder subBuilder = null;
-              if (configRuleCase_ == 2) {
-                subBuilder = ((context.ContextOuterClass.ConfigRule_Custom) configRule_).toBuilder();
-              }
-              configRule_ =
-                  input.readMessage(context.ContextOuterClass.ConfigRule_Custom.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom((context.ContextOuterClass.ConfigRule_Custom) configRule_);
-                configRule_ = subBuilder.buildPartial();
-              }
-              configRuleCase_ = 2;
-              break;
-            }
-            case 26: {
-              context.ContextOuterClass.ConfigRule_ACL.Builder subBuilder = null;
-              if (configRuleCase_ == 3) {
-                subBuilder = ((context.ContextOuterClass.ConfigRule_ACL) configRule_).toBuilder();
-              }
-              configRule_ =
-                  input.readMessage(context.ContextOuterClass.ConfigRule_ACL.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom((context.ContextOuterClass.ConfigRule_ACL) configRule_);
-                configRule_ = subBuilder.buildPartial();
-              }
-              configRuleCase_ = 3;
+              java.lang.String s = input.readStringRequireUtf8();
+
+              constraintValue_ = s;
               break;
             }
             default: {
@@ -49293,137 +51307,91 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
+      return context.ContextOuterClass.internal_static_context_Constraint_Custom_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConfigRule_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Constraint_Custom_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConfigRule.class, context.ContextOuterClass.ConfigRule.Builder.class);
-    }
-
-    private int configRuleCase_ = 0;
-    private java.lang.Object configRule_;
-    public enum ConfigRuleCase
-        implements com.google.protobuf.Internal.EnumLite,
-            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
-      CUSTOM(2),
-      ACL(3),
-      CONFIGRULE_NOT_SET(0);
-      private final int value;
-      private ConfigRuleCase(int value) {
-        this.value = value;
-      }
-      /**
-       * @param value The number of the enum to look for.
-       * @return The enum associated with the given number.
-       * @deprecated Use {@link #forNumber(int)} instead.
-       */
-      @java.lang.Deprecated
-      public static ConfigRuleCase valueOf(int value) {
-        return forNumber(value);
-      }
-
-      public static ConfigRuleCase forNumber(int value) {
-        switch (value) {
-          case 2: return CUSTOM;
-          case 3: return ACL;
-          case 0: return CONFIGRULE_NOT_SET;
-          default: return null;
-        }
-      }
-      public int getNumber() {
-        return this.value;
-      }
-    };
-
-    public ConfigRuleCase
-    getConfigRuleCase() {
-      return ConfigRuleCase.forNumber(
-          configRuleCase_);
-    }
-
-    public static final int ACTION_FIELD_NUMBER = 1;
-    private int action_;
-    /**
-     * <code>.context.ConfigActionEnum action = 1;</code>
-     * @return The enum numeric value on the wire for action.
-     */
-    @java.lang.Override public int getActionValue() {
-      return action_;
-    }
-    /**
-     * <code>.context.ConfigActionEnum action = 1;</code>
-     * @return The action.
-     */
-    @java.lang.Override public context.ContextOuterClass.ConfigActionEnum getAction() {
-      @SuppressWarnings("deprecation")
-      context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.valueOf(action_);
-      return result == null ? context.ContextOuterClass.ConfigActionEnum.UNRECOGNIZED : result;
+              context.ContextOuterClass.Constraint_Custom.class, context.ContextOuterClass.Constraint_Custom.Builder.class);
     }
 
-    public static final int CUSTOM_FIELD_NUMBER = 2;
-    /**
-     * <code>.context.ConfigRule_Custom custom = 2;</code>
-     * @return Whether the custom field is set.
-     */
-    @java.lang.Override
-    public boolean hasCustom() {
-      return configRuleCase_ == 2;
-    }
+    public static final int CONSTRAINT_TYPE_FIELD_NUMBER = 1;
+    private volatile java.lang.Object constraintType_;
     /**
-     * <code>.context.ConfigRule_Custom custom = 2;</code>
-     * @return The custom.
+     * <code>string constraint_type = 1;</code>
+     * @return The constraintType.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule_Custom getCustom() {
-      if (configRuleCase_ == 2) {
-         return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
+    public java.lang.String getConstraintType() {
+      java.lang.Object ref = constraintType_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        constraintType_ = s;
+        return s;
       }
-      return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
     }
     /**
-     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     * <code>string constraint_type = 1;</code>
+     * @return The bytes for constraintType.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule_CustomOrBuilder getCustomOrBuilder() {
-      if (configRuleCase_ == 2) {
-         return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
+    public com.google.protobuf.ByteString
+        getConstraintTypeBytes() {
+      java.lang.Object ref = constraintType_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        constraintType_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
       }
-      return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
     }
 
-    public static final int ACL_FIELD_NUMBER = 3;
-    /**
-     * <code>.context.ConfigRule_ACL acl = 3;</code>
-     * @return Whether the acl field is set.
-     */
-    @java.lang.Override
-    public boolean hasAcl() {
-      return configRuleCase_ == 3;
-    }
+    public static final int CONSTRAINT_VALUE_FIELD_NUMBER = 2;
+    private volatile java.lang.Object constraintValue_;
     /**
-     * <code>.context.ConfigRule_ACL acl = 3;</code>
-     * @return The acl.
+     * <code>string constraint_value = 2;</code>
+     * @return The constraintValue.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule_ACL getAcl() {
-      if (configRuleCase_ == 3) {
-         return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
+    public java.lang.String getConstraintValue() {
+      java.lang.Object ref = constraintValue_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        constraintValue_ = s;
+        return s;
       }
-      return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
     }
     /**
-     * <code>.context.ConfigRule_ACL acl = 3;</code>
+     * <code>string constraint_value = 2;</code>
+     * @return The bytes for constraintValue.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule_ACLOrBuilder getAclOrBuilder() {
-      if (configRuleCase_ == 3) {
-         return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
+    public com.google.protobuf.ByteString
+        getConstraintValueBytes() {
+      java.lang.Object ref = constraintValue_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        constraintValue_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
       }
-      return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -49440,14 +51408,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (action_ != context.ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED.getNumber()) {
-        output.writeEnum(1, action_);
-      }
-      if (configRuleCase_ == 2) {
-        output.writeMessage(2, (context.ContextOuterClass.ConfigRule_Custom) configRule_);
+      if (!getConstraintTypeBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, constraintType_);
       }
-      if (configRuleCase_ == 3) {
-        output.writeMessage(3, (context.ContextOuterClass.ConfigRule_ACL) configRule_);
+      if (!getConstraintValueBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, constraintValue_);
       }
       unknownFields.writeTo(output);
     }
@@ -49458,47 +51423,31 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (action_ != context.ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED.getNumber()) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(1, action_);
-      }
-      if (configRuleCase_ == 2) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, (context.ContextOuterClass.ConfigRule_Custom) configRule_);
+      if (!getConstraintTypeBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, constraintType_);
       }
-      if (configRuleCase_ == 3) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, (context.ContextOuterClass.ConfigRule_ACL) configRule_);
+      if (!getConstraintValueBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, constraintValue_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof context.ContextOuterClass.ConfigRule)) {
-        return super.equals(obj);
-      }
-      context.ContextOuterClass.ConfigRule other = (context.ContextOuterClass.ConfigRule) obj;
-
-      if (action_ != other.action_) return false;
-      if (!getConfigRuleCase().equals(other.getConfigRuleCase())) return false;
-      switch (configRuleCase_) {
-        case 2:
-          if (!getCustom()
-              .equals(other.getCustom())) return false;
-          break;
-        case 3:
-          if (!getAcl()
-              .equals(other.getAcl())) return false;
-          break;
-        case 0:
-        default:
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.Constraint_Custom)) {
+        return super.equals(obj);
       }
+      context.ContextOuterClass.Constraint_Custom other = (context.ContextOuterClass.Constraint_Custom) obj;
+
+      if (!getConstraintType()
+          .equals(other.getConstraintType())) return false;
+      if (!getConstraintValue()
+          .equals(other.getConstraintValue())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -49510,88 +51459,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + ACTION_FIELD_NUMBER;
-      hash = (53 * hash) + action_;
-      switch (configRuleCase_) {
-        case 2:
-          hash = (37 * hash) + CUSTOM_FIELD_NUMBER;
-          hash = (53 * hash) + getCustom().hashCode();
-          break;
-        case 3:
-          hash = (37 * hash) + ACL_FIELD_NUMBER;
-          hash = (53 * hash) + getAcl().hashCode();
-          break;
-        case 0:
-        default:
-      }
+      hash = (37 * hash) + CONSTRAINT_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + getConstraintType().hashCode();
+      hash = (37 * hash) + CONSTRAINT_VALUE_FIELD_NUMBER;
+      hash = (53 * hash) + getConstraintValue().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(byte[] data)
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_Custom parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule parseDelimitedFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -49604,7 +51543,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConfigRule prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Constraint_Custom prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -49620,26 +51559,30 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConfigRule}
+     * <pre>
+     * ----- Constraint ----------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.Constraint_Custom}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConfigRule)
-        context.ContextOuterClass.ConfigRuleOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Constraint_Custom)
+        context.ContextOuterClass.Constraint_CustomOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_Custom_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Constraint_Custom_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConfigRule.class, context.ContextOuterClass.ConfigRule.Builder.class);
+                context.ContextOuterClass.Constraint_Custom.class, context.ContextOuterClass.Constraint_Custom.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConfigRule.newBuilder()
+      // Construct using context.ContextOuterClass.Constraint_Custom.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -49657,27 +51600,27 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        action_ = 0;
+        constraintType_ = "";
+
+        constraintValue_ = "";
 
-        configRuleCase_ = 0;
-        configRule_ = null;
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_Custom_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConfigRule.getDefaultInstance();
+      public context.ContextOuterClass.Constraint_Custom getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule build() {
-        context.ContextOuterClass.ConfigRule result = buildPartial();
+      public context.ContextOuterClass.Constraint_Custom build() {
+        context.ContextOuterClass.Constraint_Custom result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -49685,24 +51628,10 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule buildPartial() {
-        context.ContextOuterClass.ConfigRule result = new context.ContextOuterClass.ConfigRule(this);
-        result.action_ = action_;
-        if (configRuleCase_ == 2) {
-          if (customBuilder_ == null) {
-            result.configRule_ = configRule_;
-          } else {
-            result.configRule_ = customBuilder_.build();
-          }
-        }
-        if (configRuleCase_ == 3) {
-          if (aclBuilder_ == null) {
-            result.configRule_ = configRule_;
-          } else {
-            result.configRule_ = aclBuilder_.build();
-          }
-        }
-        result.configRuleCase_ = configRuleCase_;
+      public context.ContextOuterClass.Constraint_Custom buildPartial() {
+        context.ContextOuterClass.Constraint_Custom result = new context.ContextOuterClass.Constraint_Custom(this);
+        result.constraintType_ = constraintType_;
+        result.constraintValue_ = constraintValue_;
         onBuilt();
         return result;
       }
@@ -49738,413 +51667,206 @@ public final class ContextOuterClass {
           com.google.protobuf.Descriptors.FieldDescriptor field,
           java.lang.Object value) {
         return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConfigRule) {
-          return mergeFrom((context.ContextOuterClass.ConfigRule)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(context.ContextOuterClass.ConfigRule other) {
-        if (other == context.ContextOuterClass.ConfigRule.getDefaultInstance()) return this;
-        if (other.action_ != 0) {
-          setActionValue(other.getActionValue());
-        }
-        switch (other.getConfigRuleCase()) {
-          case CUSTOM: {
-            mergeCustom(other.getCustom());
-            break;
-          }
-          case ACL: {
-            mergeAcl(other.getAcl());
-            break;
-          }
-          case CONFIGRULE_NOT_SET: {
-            break;
-          }
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.ConfigRule parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConfigRule) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int configRuleCase_ = 0;
-      private java.lang.Object configRule_;
-      public ConfigRuleCase
-          getConfigRuleCase() {
-        return ConfigRuleCase.forNumber(
-            configRuleCase_);
-      }
-
-      public Builder clearConfigRule() {
-        configRuleCase_ = 0;
-        configRule_ = null;
-        onChanged();
-        return this;
-      }
-
-
-      private int action_ = 0;
-      /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @return The enum numeric value on the wire for action.
-       */
-      @java.lang.Override public int getActionValue() {
-        return action_;
-      }
-      /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @param value The enum numeric value on the wire for action to set.
-       * @return This builder for chaining.
-       */
-      public Builder setActionValue(int value) {
-        
-        action_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @return The action.
-       */
-      @java.lang.Override
-      public context.ContextOuterClass.ConfigActionEnum getAction() {
-        @SuppressWarnings("deprecation")
-        context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.valueOf(action_);
-        return result == null ? context.ContextOuterClass.ConfigActionEnum.UNRECOGNIZED : result;
-      }
-      /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @param value The action to set.
-       * @return This builder for chaining.
-       */
-      public Builder setAction(context.ContextOuterClass.ConfigActionEnum value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        
-        action_ = value.getNumber();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearAction() {
-        
-        action_ = 0;
-        onChanged();
-        return this;
-      }
-
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConfigRule_Custom, context.ContextOuterClass.ConfigRule_Custom.Builder, context.ContextOuterClass.ConfigRule_CustomOrBuilder> customBuilder_;
-      /**
-       * <code>.context.ConfigRule_Custom custom = 2;</code>
-       * @return Whether the custom field is set.
-       */
-      @java.lang.Override
-      public boolean hasCustom() {
-        return configRuleCase_ == 2;
-      }
-      /**
-       * <code>.context.ConfigRule_Custom custom = 2;</code>
-       * @return The custom.
-       */
+      }
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_Custom getCustom() {
-        if (customBuilder_ == null) {
-          if (configRuleCase_ == 2) {
-            return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
-          }
-          return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.Constraint_Custom) {
+          return mergeFrom((context.ContextOuterClass.Constraint_Custom)other);
         } else {
-          if (configRuleCase_ == 2) {
-            return customBuilder_.getMessage();
-          }
-          return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
+          super.mergeFrom(other);
+          return this;
         }
       }
-      /**
-       * <code>.context.ConfigRule_Custom custom = 2;</code>
-       */
-      public Builder setCustom(context.ContextOuterClass.ConfigRule_Custom value) {
-        if (customBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          configRule_ = value;
+
+      public Builder mergeFrom(context.ContextOuterClass.Constraint_Custom other) {
+        if (other == context.ContextOuterClass.Constraint_Custom.getDefaultInstance()) return this;
+        if (!other.getConstraintType().isEmpty()) {
+          constraintType_ = other.constraintType_;
           onChanged();
-        } else {
-          customBuilder_.setMessage(value);
         }
-        configRuleCase_ = 2;
-        return this;
-      }
-      /**
-       * <code>.context.ConfigRule_Custom custom = 2;</code>
-       */
-      public Builder setCustom(
-          context.ContextOuterClass.ConfigRule_Custom.Builder builderForValue) {
-        if (customBuilder_ == null) {
-          configRule_ = builderForValue.build();
+        if (!other.getConstraintValue().isEmpty()) {
+          constraintValue_ = other.constraintValue_;
           onChanged();
-        } else {
-          customBuilder_.setMessage(builderForValue.build());
         }
-        configRuleCase_ = 2;
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
         return this;
       }
-      /**
-       * <code>.context.ConfigRule_Custom custom = 2;</code>
-       */
-      public Builder mergeCustom(context.ContextOuterClass.ConfigRule_Custom value) {
-        if (customBuilder_ == null) {
-          if (configRuleCase_ == 2 &&
-              configRule_ != context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance()) {
-            configRule_ = context.ContextOuterClass.ConfigRule_Custom.newBuilder((context.ContextOuterClass.ConfigRule_Custom) configRule_)
-                .mergeFrom(value).buildPartial();
-          } else {
-            configRule_ = value;
-          }
-          onChanged();
-        } else {
-          if (configRuleCase_ == 2) {
-            customBuilder_.mergeFrom(value);
-          }
-          customBuilder_.setMessage(value);
-        }
-        configRuleCase_ = 2;
-        return this;
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-      /**
-       * <code>.context.ConfigRule_Custom custom = 2;</code>
-       */
-      public Builder clearCustom() {
-        if (customBuilder_ == null) {
-          if (configRuleCase_ == 2) {
-            configRuleCase_ = 0;
-            configRule_ = null;
-            onChanged();
-          }
-        } else {
-          if (configRuleCase_ == 2) {
-            configRuleCase_ = 0;
-            configRule_ = null;
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Constraint_Custom parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Constraint_Custom) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
-          customBuilder_.clear();
         }
         return this;
       }
+
+      private java.lang.Object constraintType_ = "";
       /**
-       * <code>.context.ConfigRule_Custom custom = 2;</code>
-       */
-      public context.ContextOuterClass.ConfigRule_Custom.Builder getCustomBuilder() {
-        return getCustomFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.ConfigRule_Custom custom = 2;</code>
+       * <code>string constraint_type = 1;</code>
+       * @return The constraintType.
        */
-      @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_CustomOrBuilder getCustomOrBuilder() {
-        if ((configRuleCase_ == 2) && (customBuilder_ != null)) {
-          return customBuilder_.getMessageOrBuilder();
+      public java.lang.String getConstraintType() {
+        java.lang.Object ref = constraintType_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          constraintType_ = s;
+          return s;
         } else {
-          if (configRuleCase_ == 2) {
-            return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
-          }
-          return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
+          return (java.lang.String) ref;
         }
       }
       /**
-       * <code>.context.ConfigRule_Custom custom = 2;</code>
+       * <code>string constraint_type = 1;</code>
+       * @return The bytes for constraintType.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConfigRule_Custom, context.ContextOuterClass.ConfigRule_Custom.Builder, context.ContextOuterClass.ConfigRule_CustomOrBuilder> 
-          getCustomFieldBuilder() {
-        if (customBuilder_ == null) {
-          if (!(configRuleCase_ == 2)) {
-            configRule_ = context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
-          }
-          customBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConfigRule_Custom, context.ContextOuterClass.ConfigRule_Custom.Builder, context.ContextOuterClass.ConfigRule_CustomOrBuilder>(
-                  (context.ContextOuterClass.ConfigRule_Custom) configRule_,
-                  getParentForChildren(),
-                  isClean());
-          configRule_ = null;
+      public com.google.protobuf.ByteString
+          getConstraintTypeBytes() {
+        java.lang.Object ref = constraintType_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          constraintType_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
         }
-        configRuleCase_ = 2;
-        onChanged();;
-        return customBuilder_;
-      }
-
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConfigRule_ACL, context.ContextOuterClass.ConfigRule_ACL.Builder, context.ContextOuterClass.ConfigRule_ACLOrBuilder> aclBuilder_;
-      /**
-       * <code>.context.ConfigRule_ACL acl = 3;</code>
-       * @return Whether the acl field is set.
-       */
-      @java.lang.Override
-      public boolean hasAcl() {
-        return configRuleCase_ == 3;
       }
       /**
-       * <code>.context.ConfigRule_ACL acl = 3;</code>
-       * @return The acl.
+       * <code>string constraint_type = 1;</code>
+       * @param value The constraintType to set.
+       * @return This builder for chaining.
        */
-      @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_ACL getAcl() {
-        if (aclBuilder_ == null) {
-          if (configRuleCase_ == 3) {
-            return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
-          }
-          return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
-        } else {
-          if (configRuleCase_ == 3) {
-            return aclBuilder_.getMessage();
-          }
-          return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
-        }
+      public Builder setConstraintType(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        constraintType_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       * <code>string constraint_type = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder setAcl(context.ContextOuterClass.ConfigRule_ACL value) {
-        if (aclBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          configRule_ = value;
-          onChanged();
-        } else {
-          aclBuilder_.setMessage(value);
-        }
-        configRuleCase_ = 3;
+      public Builder clearConstraintType() {
+        
+        constraintType_ = getDefaultInstance().getConstraintType();
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       * <code>string constraint_type = 1;</code>
+       * @param value The bytes for constraintType to set.
+       * @return This builder for chaining.
        */
-      public Builder setAcl(
-          context.ContextOuterClass.ConfigRule_ACL.Builder builderForValue) {
-        if (aclBuilder_ == null) {
-          configRule_ = builderForValue.build();
-          onChanged();
-        } else {
-          aclBuilder_.setMessage(builderForValue.build());
-        }
-        configRuleCase_ = 3;
+      public Builder setConstraintTypeBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        constraintType_ = value;
+        onChanged();
         return this;
       }
+
+      private java.lang.Object constraintValue_ = "";
       /**
-       * <code>.context.ConfigRule_ACL acl = 3;</code>
-       */
-      public Builder mergeAcl(context.ContextOuterClass.ConfigRule_ACL value) {
-        if (aclBuilder_ == null) {
-          if (configRuleCase_ == 3 &&
-              configRule_ != context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance()) {
-            configRule_ = context.ContextOuterClass.ConfigRule_ACL.newBuilder((context.ContextOuterClass.ConfigRule_ACL) configRule_)
-                .mergeFrom(value).buildPartial();
-          } else {
-            configRule_ = value;
-          }
-          onChanged();
+       * <code>string constraint_value = 2;</code>
+       * @return The constraintValue.
+       */
+      public java.lang.String getConstraintValue() {
+        java.lang.Object ref = constraintValue_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          constraintValue_ = s;
+          return s;
         } else {
-          if (configRuleCase_ == 3) {
-            aclBuilder_.mergeFrom(value);
-          }
-          aclBuilder_.setMessage(value);
+          return (java.lang.String) ref;
         }
-        configRuleCase_ = 3;
-        return this;
       }
       /**
-       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       * <code>string constraint_value = 2;</code>
+       * @return The bytes for constraintValue.
        */
-      public Builder clearAcl() {
-        if (aclBuilder_ == null) {
-          if (configRuleCase_ == 3) {
-            configRuleCase_ = 0;
-            configRule_ = null;
-            onChanged();
-          }
+      public com.google.protobuf.ByteString
+          getConstraintValueBytes() {
+        java.lang.Object ref = constraintValue_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          constraintValue_ = b;
+          return b;
         } else {
-          if (configRuleCase_ == 3) {
-            configRuleCase_ = 0;
-            configRule_ = null;
-          }
-          aclBuilder_.clear();
+          return (com.google.protobuf.ByteString) ref;
         }
-        return this;
       }
       /**
-       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       * <code>string constraint_value = 2;</code>
+       * @param value The constraintValue to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ConfigRule_ACL.Builder getAclBuilder() {
-        return getAclFieldBuilder().getBuilder();
+      public Builder setConstraintValue(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        constraintValue_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       * <code>string constraint_value = 2;</code>
+       * @return This builder for chaining.
        */
-      @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_ACLOrBuilder getAclOrBuilder() {
-        if ((configRuleCase_ == 3) && (aclBuilder_ != null)) {
-          return aclBuilder_.getMessageOrBuilder();
-        } else {
-          if (configRuleCase_ == 3) {
-            return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
-          }
-          return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
-        }
+      public Builder clearConstraintValue() {
+        
+        constraintValue_ = getDefaultInstance().getConstraintValue();
+        onChanged();
+        return this;
       }
       /**
-       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       * <code>string constraint_value = 2;</code>
+       * @param value The bytes for constraintValue to set.
+       * @return This builder for chaining.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConfigRule_ACL, context.ContextOuterClass.ConfigRule_ACL.Builder, context.ContextOuterClass.ConfigRule_ACLOrBuilder> 
-          getAclFieldBuilder() {
-        if (aclBuilder_ == null) {
-          if (!(configRuleCase_ == 3)) {
-            configRule_ = context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
-          }
-          aclBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConfigRule_ACL, context.ContextOuterClass.ConfigRule_ACL.Builder, context.ContextOuterClass.ConfigRule_ACLOrBuilder>(
-                  (context.ContextOuterClass.ConfigRule_ACL) configRule_,
-                  getParentForChildren(),
-                  isClean());
-          configRule_ = null;
-        }
-        configRuleCase_ = 3;
-        onChanged();;
-        return aclBuilder_;
+      public Builder setConstraintValueBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        constraintValue_ = value;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -50159,100 +51881,82 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConfigRule)
+      // @@protoc_insertion_point(builder_scope:context.Constraint_Custom)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConfigRule)
-    private static final context.ContextOuterClass.ConfigRule DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Constraint_Custom)
+    private static final context.ContextOuterClass.Constraint_Custom DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_Custom();
     }
 
-    public static context.ContextOuterClass.ConfigRule getDefaultInstance() {
+    public static context.ContextOuterClass.Constraint_Custom getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConfigRule>
-        PARSER = new com.google.protobuf.AbstractParser<ConfigRule>() {
+    private static final com.google.protobuf.Parser<Constraint_Custom>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_Custom>() {
       @java.lang.Override
-      public ConfigRule parsePartialFrom(
+      public Constraint_Custom parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConfigRule(input, extensionRegistry);
+        return new Constraint_Custom(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConfigRule> parser() {
+    public static com.google.protobuf.Parser<Constraint_Custom> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConfigRule> getParserForType() {
+    public com.google.protobuf.Parser<Constraint_Custom> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule getDefaultInstanceForType() {
+    public context.ContextOuterClass.Constraint_Custom getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface Constraint_CustomOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Constraint_Custom)
+  public interface Constraint_ScheduleOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_Schedule)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>string constraint_type = 1;</code>
-     * @return The constraintType.
-     */
-    java.lang.String getConstraintType();
-    /**
-     * <code>string constraint_type = 1;</code>
-     * @return The bytes for constraintType.
+     * <code>float start_timestamp = 1;</code>
+     * @return The startTimestamp.
      */
-    com.google.protobuf.ByteString
-        getConstraintTypeBytes();
+    float getStartTimestamp();
 
     /**
-     * <code>string constraint_value = 2;</code>
-     * @return The constraintValue.
-     */
-    java.lang.String getConstraintValue();
-    /**
-     * <code>string constraint_value = 2;</code>
-     * @return The bytes for constraintValue.
+     * <code>float duration_days = 2;</code>
+     * @return The durationDays.
      */
-    com.google.protobuf.ByteString
-        getConstraintValueBytes();
+    float getDurationDays();
   }
   /**
-   * <pre>
-   * ----- Constraint ----------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.Constraint_Custom}
+   * Protobuf type {@code context.Constraint_Schedule}
    */
-  public static final class Constraint_Custom extends
+  public static final class Constraint_Schedule extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Constraint_Custom)
-      Constraint_CustomOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Constraint_Schedule)
+      Constraint_ScheduleOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Constraint_Custom.newBuilder() to construct.
-    private Constraint_Custom(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Constraint_Schedule.newBuilder() to construct.
+    private Constraint_Schedule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Constraint_Custom() {
-      constraintType_ = "";
-      constraintValue_ = "";
+    private Constraint_Schedule() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Constraint_Custom();
+      return new Constraint_Schedule();
     }
 
     @java.lang.Override
@@ -50260,7 +51964,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Constraint_Custom(
+    private Constraint_Schedule(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -50278,16 +51982,14 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 10: {
-              java.lang.String s = input.readStringRequireUtf8();
+            case 13: {
 
-              constraintType_ = s;
+              startTimestamp_ = input.readFloat();
               break;
             }
-            case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
+            case 21: {
 
-              constraintValue_ = s;
+              durationDays_ = input.readFloat();
               break;
             }
             default: {
@@ -50311,91 +52013,37 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Constraint_Custom_descriptor;
+      return context.ContextOuterClass.internal_static_context_Constraint_Schedule_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Constraint_Custom_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Constraint_Schedule_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Constraint_Custom.class, context.ContextOuterClass.Constraint_Custom.Builder.class);
-    }
-
-    public static final int CONSTRAINT_TYPE_FIELD_NUMBER = 1;
-    private volatile java.lang.Object constraintType_;
-    /**
-     * <code>string constraint_type = 1;</code>
-     * @return The constraintType.
-     */
-    @java.lang.Override
-    public java.lang.String getConstraintType() {
-      java.lang.Object ref = constraintType_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        constraintType_ = s;
-        return s;
-      }
-    }
-    /**
-     * <code>string constraint_type = 1;</code>
-     * @return The bytes for constraintType.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString
-        getConstraintTypeBytes() {
-      java.lang.Object ref = constraintType_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        constraintType_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+              context.ContextOuterClass.Constraint_Schedule.class, context.ContextOuterClass.Constraint_Schedule.Builder.class);
     }
 
-    public static final int CONSTRAINT_VALUE_FIELD_NUMBER = 2;
-    private volatile java.lang.Object constraintValue_;
+    public static final int START_TIMESTAMP_FIELD_NUMBER = 1;
+    private float startTimestamp_;
     /**
-     * <code>string constraint_value = 2;</code>
-     * @return The constraintValue.
-     */
-    @java.lang.Override
-    public java.lang.String getConstraintValue() {
-      java.lang.Object ref = constraintValue_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        constraintValue_ = s;
-        return s;
-      }
+     * <code>float start_timestamp = 1;</code>
+     * @return The startTimestamp.
+     */
+    @java.lang.Override
+    public float getStartTimestamp() {
+      return startTimestamp_;
     }
+
+    public static final int DURATION_DAYS_FIELD_NUMBER = 2;
+    private float durationDays_;
     /**
-     * <code>string constraint_value = 2;</code>
-     * @return The bytes for constraintValue.
+     * <code>float duration_days = 2;</code>
+     * @return The durationDays.
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getConstraintValueBytes() {
-      java.lang.Object ref = constraintValue_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        constraintValue_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public float getDurationDays() {
+      return durationDays_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -50412,11 +52060,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (!getConstraintTypeBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, constraintType_);
+      if (startTimestamp_ != 0F) {
+        output.writeFloat(1, startTimestamp_);
       }
-      if (!getConstraintValueBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, constraintValue_);
+      if (durationDays_ != 0F) {
+        output.writeFloat(2, durationDays_);
       }
       unknownFields.writeTo(output);
     }
@@ -50427,11 +52075,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (!getConstraintTypeBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, constraintType_);
+      if (startTimestamp_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(1, startTimestamp_);
       }
-      if (!getConstraintValueBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, constraintValue_);
+      if (durationDays_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(2, durationDays_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -50443,15 +52093,17 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Constraint_Custom)) {
+      if (!(obj instanceof context.ContextOuterClass.Constraint_Schedule)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Constraint_Custom other = (context.ContextOuterClass.Constraint_Custom) obj;
+      context.ContextOuterClass.Constraint_Schedule other = (context.ContextOuterClass.Constraint_Schedule) obj;
 
-      if (!getConstraintType()
-          .equals(other.getConstraintType())) return false;
-      if (!getConstraintValue()
-          .equals(other.getConstraintValue())) return false;
+      if (java.lang.Float.floatToIntBits(getStartTimestamp())
+          != java.lang.Float.floatToIntBits(
+              other.getStartTimestamp())) return false;
+      if (java.lang.Float.floatToIntBits(getDurationDays())
+          != java.lang.Float.floatToIntBits(
+              other.getDurationDays())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -50463,78 +52115,80 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + CONSTRAINT_TYPE_FIELD_NUMBER;
-      hash = (53 * hash) + getConstraintType().hashCode();
-      hash = (37 * hash) + CONSTRAINT_VALUE_FIELD_NUMBER;
-      hash = (53 * hash) + getConstraintValue().hashCode();
+      hash = (37 * hash) + START_TIMESTAMP_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getStartTimestamp());
+      hash = (37 * hash) + DURATION_DAYS_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getDurationDays());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(byte[] data)
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_Schedule parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseDelimitedFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -50547,7 +52201,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Constraint_Custom prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Constraint_Schedule prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -50563,30 +52217,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Constraint ----------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.Constraint_Custom}
+     * Protobuf type {@code context.Constraint_Schedule}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Constraint_Custom)
-        context.ContextOuterClass.Constraint_CustomOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Constraint_Schedule)
+        context.ContextOuterClass.Constraint_ScheduleOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Constraint_Custom_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_Schedule_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Constraint_Custom_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Constraint_Schedule_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Constraint_Custom.class, context.ContextOuterClass.Constraint_Custom.Builder.class);
+                context.ContextOuterClass.Constraint_Schedule.class, context.ContextOuterClass.Constraint_Schedule.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Constraint_Custom.newBuilder()
+      // Construct using context.ContextOuterClass.Constraint_Schedule.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -50604,9 +52254,9 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        constraintType_ = "";
+        startTimestamp_ = 0F;
 
-        constraintValue_ = "";
+        durationDays_ = 0F;
 
         return this;
       }
@@ -50614,17 +52264,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Constraint_Custom_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_Schedule_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_Custom getDefaultInstanceForType() {
-        return context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
+      public context.ContextOuterClass.Constraint_Schedule getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_Custom build() {
-        context.ContextOuterClass.Constraint_Custom result = buildPartial();
+      public context.ContextOuterClass.Constraint_Schedule build() {
+        context.ContextOuterClass.Constraint_Schedule result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -50632,10 +52282,10 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_Custom buildPartial() {
-        context.ContextOuterClass.Constraint_Custom result = new context.ContextOuterClass.Constraint_Custom(this);
-        result.constraintType_ = constraintType_;
-        result.constraintValue_ = constraintValue_;
+      public context.ContextOuterClass.Constraint_Schedule buildPartial() {
+        context.ContextOuterClass.Constraint_Schedule result = new context.ContextOuterClass.Constraint_Schedule(this);
+        result.startTimestamp_ = startTimestamp_;
+        result.durationDays_ = durationDays_;
         onBuilt();
         return result;
       }
@@ -50674,23 +52324,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Constraint_Custom) {
-          return mergeFrom((context.ContextOuterClass.Constraint_Custom)other);
+        if (other instanceof context.ContextOuterClass.Constraint_Schedule) {
+          return mergeFrom((context.ContextOuterClass.Constraint_Schedule)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Constraint_Custom other) {
-        if (other == context.ContextOuterClass.Constraint_Custom.getDefaultInstance()) return this;
-        if (!other.getConstraintType().isEmpty()) {
-          constraintType_ = other.constraintType_;
-          onChanged();
+      public Builder mergeFrom(context.ContextOuterClass.Constraint_Schedule other) {
+        if (other == context.ContextOuterClass.Constraint_Schedule.getDefaultInstance()) return this;
+        if (other.getStartTimestamp() != 0F) {
+          setStartTimestamp(other.getStartTimestamp());
         }
-        if (!other.getConstraintValue().isEmpty()) {
-          constraintValue_ = other.constraintValue_;
-          onChanged();
+        if (other.getDurationDays() != 0F) {
+          setDurationDays(other.getDurationDays());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -50707,168 +52355,78 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Constraint_Custom parsedMessage = null;
+        context.ContextOuterClass.Constraint_Schedule parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Constraint_Custom) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private java.lang.Object constraintType_ = "";
-      /**
-       * <code>string constraint_type = 1;</code>
-       * @return The constraintType.
-       */
-      public java.lang.String getConstraintType() {
-        java.lang.Object ref = constraintType_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          constraintType_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>string constraint_type = 1;</code>
-       * @return The bytes for constraintType.
-       */
-      public com.google.protobuf.ByteString
-          getConstraintTypeBytes() {
-        java.lang.Object ref = constraintType_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          constraintType_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       * <code>string constraint_type = 1;</code>
-       * @param value The constraintType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setConstraintType(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        constraintType_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string constraint_type = 1;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearConstraintType() {
-        
-        constraintType_ = getDefaultInstance().getConstraintType();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string constraint_type = 1;</code>
-       * @param value The bytes for constraintType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setConstraintTypeBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        constraintType_ = value;
-        onChanged();
-        return this;
-      }
-
-      private java.lang.Object constraintValue_ = "";
-      /**
-       * <code>string constraint_value = 2;</code>
-       * @return The constraintValue.
-       */
-      public java.lang.String getConstraintValue() {
-        java.lang.Object ref = constraintValue_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          constraintValue_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
+          parsedMessage = (context.ContextOuterClass.Constraint_Schedule) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
         }
+        return this;
       }
+
+      private float startTimestamp_ ;
       /**
-       * <code>string constraint_value = 2;</code>
-       * @return The bytes for constraintValue.
+       * <code>float start_timestamp = 1;</code>
+       * @return The startTimestamp.
        */
-      public com.google.protobuf.ByteString
-          getConstraintValueBytes() {
-        java.lang.Object ref = constraintValue_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          constraintValue_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
+      @java.lang.Override
+      public float getStartTimestamp() {
+        return startTimestamp_;
       }
       /**
-       * <code>string constraint_value = 2;</code>
-       * @param value The constraintValue to set.
+       * <code>float start_timestamp = 1;</code>
+       * @param value The startTimestamp to set.
        * @return This builder for chaining.
        */
-      public Builder setConstraintValue(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        constraintValue_ = value;
+      public Builder setStartTimestamp(float value) {
+        
+        startTimestamp_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>string constraint_value = 2;</code>
+       * <code>float start_timestamp = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder clearConstraintValue() {
+      public Builder clearStartTimestamp() {
         
-        constraintValue_ = getDefaultInstance().getConstraintValue();
+        startTimestamp_ = 0F;
         onChanged();
         return this;
       }
+
+      private float durationDays_ ;
+      /**
+       * <code>float duration_days = 2;</code>
+       * @return The durationDays.
+       */
+      @java.lang.Override
+      public float getDurationDays() {
+        return durationDays_;
+      }
       /**
-       * <code>string constraint_value = 2;</code>
-       * @param value The bytes for constraintValue to set.
+       * <code>float duration_days = 2;</code>
+       * @param value The durationDays to set.
        * @return This builder for chaining.
        */
-      public Builder setConstraintValueBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
+      public Builder setDurationDays(float value) {
         
-        constraintValue_ = value;
+        durationDays_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>float duration_days = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDurationDays() {
+        
+        durationDays_ = 0F;
         onChanged();
         return this;
       }
@@ -50885,82 +52443,82 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Constraint_Custom)
+      // @@protoc_insertion_point(builder_scope:context.Constraint_Schedule)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Constraint_Custom)
-    private static final context.ContextOuterClass.Constraint_Custom DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Constraint_Schedule)
+    private static final context.ContextOuterClass.Constraint_Schedule DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_Custom();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_Schedule();
     }
 
-    public static context.ContextOuterClass.Constraint_Custom getDefaultInstance() {
+    public static context.ContextOuterClass.Constraint_Schedule getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Constraint_Custom>
-        PARSER = new com.google.protobuf.AbstractParser<Constraint_Custom>() {
+    private static final com.google.protobuf.Parser<Constraint_Schedule>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_Schedule>() {
       @java.lang.Override
-      public Constraint_Custom parsePartialFrom(
+      public Constraint_Schedule parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Constraint_Custom(input, extensionRegistry);
+        return new Constraint_Schedule(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Constraint_Custom> parser() {
+    public static com.google.protobuf.Parser<Constraint_Schedule> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Constraint_Custom> getParserForType() {
+    public com.google.protobuf.Parser<Constraint_Schedule> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Constraint_Custom getDefaultInstanceForType() {
+    public context.ContextOuterClass.Constraint_Schedule getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface Constraint_ScheduleOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Constraint_Schedule)
+  public interface GPS_PositionOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.GPS_Position)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>float start_timestamp = 1;</code>
-     * @return The startTimestamp.
+     * <code>float latitude = 1;</code>
+     * @return The latitude.
      */
-    float getStartTimestamp();
+    float getLatitude();
 
     /**
-     * <code>float duration_days = 2;</code>
-     * @return The durationDays.
+     * <code>float longitude = 2;</code>
+     * @return The longitude.
      */
-    float getDurationDays();
+    float getLongitude();
   }
   /**
-   * Protobuf type {@code context.Constraint_Schedule}
+   * Protobuf type {@code context.GPS_Position}
    */
-  public static final class Constraint_Schedule extends
+  public static final class GPS_Position extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Constraint_Schedule)
-      Constraint_ScheduleOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.GPS_Position)
+      GPS_PositionOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Constraint_Schedule.newBuilder() to construct.
-    private Constraint_Schedule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use GPS_Position.newBuilder() to construct.
+    private GPS_Position(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Constraint_Schedule() {
+    private GPS_Position() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Constraint_Schedule();
+      return new GPS_Position();
     }
 
     @java.lang.Override
@@ -50968,7 +52526,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Constraint_Schedule(
+    private GPS_Position(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -50988,12 +52546,12 @@ public final class ContextOuterClass {
               break;
             case 13: {
 
-              startTimestamp_ = input.readFloat();
+              latitude_ = input.readFloat();
               break;
             }
             case 21: {
 
-              durationDays_ = input.readFloat();
+              longitude_ = input.readFloat();
               break;
             }
             default: {
@@ -51017,37 +52575,37 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Constraint_Schedule_descriptor;
+      return context.ContextOuterClass.internal_static_context_GPS_Position_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Constraint_Schedule_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_GPS_Position_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Constraint_Schedule.class, context.ContextOuterClass.Constraint_Schedule.Builder.class);
+              context.ContextOuterClass.GPS_Position.class, context.ContextOuterClass.GPS_Position.Builder.class);
     }
 
-    public static final int START_TIMESTAMP_FIELD_NUMBER = 1;
-    private float startTimestamp_;
+    public static final int LATITUDE_FIELD_NUMBER = 1;
+    private float latitude_;
     /**
-     * <code>float start_timestamp = 1;</code>
-     * @return The startTimestamp.
+     * <code>float latitude = 1;</code>
+     * @return The latitude.
      */
     @java.lang.Override
-    public float getStartTimestamp() {
-      return startTimestamp_;
+    public float getLatitude() {
+      return latitude_;
     }
 
-    public static final int DURATION_DAYS_FIELD_NUMBER = 2;
-    private float durationDays_;
+    public static final int LONGITUDE_FIELD_NUMBER = 2;
+    private float longitude_;
     /**
-     * <code>float duration_days = 2;</code>
-     * @return The durationDays.
+     * <code>float longitude = 2;</code>
+     * @return The longitude.
      */
     @java.lang.Override
-    public float getDurationDays() {
-      return durationDays_;
+    public float getLongitude() {
+      return longitude_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -51064,11 +52622,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (startTimestamp_ != 0F) {
-        output.writeFloat(1, startTimestamp_);
+      if (latitude_ != 0F) {
+        output.writeFloat(1, latitude_);
       }
-      if (durationDays_ != 0F) {
-        output.writeFloat(2, durationDays_);
+      if (longitude_ != 0F) {
+        output.writeFloat(2, longitude_);
       }
       unknownFields.writeTo(output);
     }
@@ -51079,13 +52637,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (startTimestamp_ != 0F) {
+      if (latitude_ != 0F) {
         size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(1, startTimestamp_);
+          .computeFloatSize(1, latitude_);
       }
-      if (durationDays_ != 0F) {
+      if (longitude_ != 0F) {
         size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(2, durationDays_);
+          .computeFloatSize(2, longitude_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -51097,17 +52655,17 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Constraint_Schedule)) {
+      if (!(obj instanceof context.ContextOuterClass.GPS_Position)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Constraint_Schedule other = (context.ContextOuterClass.Constraint_Schedule) obj;
+      context.ContextOuterClass.GPS_Position other = (context.ContextOuterClass.GPS_Position) obj;
 
-      if (java.lang.Float.floatToIntBits(getStartTimestamp())
+      if (java.lang.Float.floatToIntBits(getLatitude())
           != java.lang.Float.floatToIntBits(
-              other.getStartTimestamp())) return false;
-      if (java.lang.Float.floatToIntBits(getDurationDays())
+              other.getLatitude())) return false;
+      if (java.lang.Float.floatToIntBits(getLongitude())
           != java.lang.Float.floatToIntBits(
-              other.getDurationDays())) return false;
+              other.getLongitude())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -51119,80 +52677,80 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + START_TIMESTAMP_FIELD_NUMBER;
+      hash = (37 * hash) + LATITUDE_FIELD_NUMBER;
       hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getStartTimestamp());
-      hash = (37 * hash) + DURATION_DAYS_FIELD_NUMBER;
+          getLatitude());
+      hash = (37 * hash) + LONGITUDE_FIELD_NUMBER;
       hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getDurationDays());
+          getLongitude());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
+    public static context.ContextOuterClass.GPS_Position parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
+    public static context.ContextOuterClass.GPS_Position parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
+    public static context.ContextOuterClass.GPS_Position parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
+    public static context.ContextOuterClass.GPS_Position parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(byte[] data)
+    public static context.ContextOuterClass.GPS_Position parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
+    public static context.ContextOuterClass.GPS_Position parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.GPS_Position parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
+    public static context.ContextOuterClass.GPS_Position parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.GPS_Position parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseDelimitedFrom(
+    public static context.ContextOuterClass.GPS_Position parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
+    public static context.ContextOuterClass.GPS_Position parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
+    public static context.ContextOuterClass.GPS_Position parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -51205,7 +52763,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Constraint_Schedule prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.GPS_Position prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -51221,26 +52779,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Constraint_Schedule}
+     * Protobuf type {@code context.GPS_Position}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Constraint_Schedule)
-        context.ContextOuterClass.Constraint_ScheduleOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.GPS_Position)
+        context.ContextOuterClass.GPS_PositionOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Constraint_Schedule_descriptor;
+        return context.ContextOuterClass.internal_static_context_GPS_Position_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Constraint_Schedule_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_GPS_Position_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Constraint_Schedule.class, context.ContextOuterClass.Constraint_Schedule.Builder.class);
+                context.ContextOuterClass.GPS_Position.class, context.ContextOuterClass.GPS_Position.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Constraint_Schedule.newBuilder()
+      // Construct using context.ContextOuterClass.GPS_Position.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -51258,9 +52816,9 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        startTimestamp_ = 0F;
+        latitude_ = 0F;
 
-        durationDays_ = 0F;
+        longitude_ = 0F;
 
         return this;
       }
@@ -51268,17 +52826,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Constraint_Schedule_descriptor;
+        return context.ContextOuterClass.internal_static_context_GPS_Position_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_Schedule getDefaultInstanceForType() {
-        return context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
+      public context.ContextOuterClass.GPS_Position getDefaultInstanceForType() {
+        return context.ContextOuterClass.GPS_Position.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_Schedule build() {
-        context.ContextOuterClass.Constraint_Schedule result = buildPartial();
+      public context.ContextOuterClass.GPS_Position build() {
+        context.ContextOuterClass.GPS_Position result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -51286,10 +52844,10 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_Schedule buildPartial() {
-        context.ContextOuterClass.Constraint_Schedule result = new context.ContextOuterClass.Constraint_Schedule(this);
-        result.startTimestamp_ = startTimestamp_;
-        result.durationDays_ = durationDays_;
+      public context.ContextOuterClass.GPS_Position buildPartial() {
+        context.ContextOuterClass.GPS_Position result = new context.ContextOuterClass.GPS_Position(this);
+        result.latitude_ = latitude_;
+        result.longitude_ = longitude_;
         onBuilt();
         return result;
       }
@@ -51328,21 +52886,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Constraint_Schedule) {
-          return mergeFrom((context.ContextOuterClass.Constraint_Schedule)other);
+        if (other instanceof context.ContextOuterClass.GPS_Position) {
+          return mergeFrom((context.ContextOuterClass.GPS_Position)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Constraint_Schedule other) {
-        if (other == context.ContextOuterClass.Constraint_Schedule.getDefaultInstance()) return this;
-        if (other.getStartTimestamp() != 0F) {
-          setStartTimestamp(other.getStartTimestamp());
+      public Builder mergeFrom(context.ContextOuterClass.GPS_Position other) {
+        if (other == context.ContextOuterClass.GPS_Position.getDefaultInstance()) return this;
+        if (other.getLatitude() != 0F) {
+          setLatitude(other.getLatitude());
         }
-        if (other.getDurationDays() != 0F) {
-          setDurationDays(other.getDurationDays());
+        if (other.getLongitude() != 0F) {
+          setLongitude(other.getLongitude());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -51359,11 +52917,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Constraint_Schedule parsedMessage = null;
+        context.ContextOuterClass.GPS_Position parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Constraint_Schedule) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.GPS_Position) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -51373,64 +52931,64 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private float startTimestamp_ ;
+      private float latitude_ ;
       /**
-       * <code>float start_timestamp = 1;</code>
-       * @return The startTimestamp.
+       * <code>float latitude = 1;</code>
+       * @return The latitude.
        */
       @java.lang.Override
-      public float getStartTimestamp() {
-        return startTimestamp_;
+      public float getLatitude() {
+        return latitude_;
       }
       /**
-       * <code>float start_timestamp = 1;</code>
-       * @param value The startTimestamp to set.
+       * <code>float latitude = 1;</code>
+       * @param value The latitude to set.
        * @return This builder for chaining.
        */
-      public Builder setStartTimestamp(float value) {
+      public Builder setLatitude(float value) {
         
-        startTimestamp_ = value;
+        latitude_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>float start_timestamp = 1;</code>
+       * <code>float latitude = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder clearStartTimestamp() {
+      public Builder clearLatitude() {
         
-        startTimestamp_ = 0F;
+        latitude_ = 0F;
         onChanged();
         return this;
       }
 
-      private float durationDays_ ;
+      private float longitude_ ;
       /**
-       * <code>float duration_days = 2;</code>
-       * @return The durationDays.
+       * <code>float longitude = 2;</code>
+       * @return The longitude.
        */
       @java.lang.Override
-      public float getDurationDays() {
-        return durationDays_;
+      public float getLongitude() {
+        return longitude_;
       }
       /**
-       * <code>float duration_days = 2;</code>
-       * @param value The durationDays to set.
+       * <code>float longitude = 2;</code>
+       * @param value The longitude to set.
        * @return This builder for chaining.
        */
-      public Builder setDurationDays(float value) {
+      public Builder setLongitude(float value) {
         
-        durationDays_ = value;
+        longitude_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>float duration_days = 2;</code>
+       * <code>float longitude = 2;</code>
        * @return This builder for chaining.
        */
-      public Builder clearDurationDays() {
+      public Builder clearLongitude() {
         
-        durationDays_ = 0F;
+        longitude_ = 0F;
         onChanged();
         return this;
       }
@@ -51447,82 +53005,104 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Constraint_Schedule)
+      // @@protoc_insertion_point(builder_scope:context.GPS_Position)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Constraint_Schedule)
-    private static final context.ContextOuterClass.Constraint_Schedule DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.GPS_Position)
+    private static final context.ContextOuterClass.GPS_Position DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_Schedule();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.GPS_Position();
     }
 
-    public static context.ContextOuterClass.Constraint_Schedule getDefaultInstance() {
+    public static context.ContextOuterClass.GPS_Position getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Constraint_Schedule>
-        PARSER = new com.google.protobuf.AbstractParser<Constraint_Schedule>() {
+    private static final com.google.protobuf.Parser<GPS_Position>
+        PARSER = new com.google.protobuf.AbstractParser<GPS_Position>() {
       @java.lang.Override
-      public Constraint_Schedule parsePartialFrom(
+      public GPS_Position parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Constraint_Schedule(input, extensionRegistry);
+        return new GPS_Position(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Constraint_Schedule> parser() {
+    public static com.google.protobuf.Parser<GPS_Position> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Constraint_Schedule> getParserForType() {
+    public com.google.protobuf.Parser<GPS_Position> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Constraint_Schedule getDefaultInstanceForType() {
+    public context.ContextOuterClass.GPS_Position getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface GPS_PositionOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.GPS_Position)
+  public interface LocationOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Location)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>float latitude = 1;</code>
-     * @return The latitude.
+     * <code>string region = 1;</code>
+     * @return Whether the region field is set.
      */
-    float getLatitude();
+    boolean hasRegion();
+    /**
+     * <code>string region = 1;</code>
+     * @return The region.
+     */
+    java.lang.String getRegion();
+    /**
+     * <code>string region = 1;</code>
+     * @return The bytes for region.
+     */
+    com.google.protobuf.ByteString
+        getRegionBytes();
 
     /**
-     * <code>float longitude = 2;</code>
-     * @return The longitude.
+     * <code>.context.GPS_Position gps_position = 2;</code>
+     * @return Whether the gpsPosition field is set.
      */
-    float getLongitude();
+    boolean hasGpsPosition();
+    /**
+     * <code>.context.GPS_Position gps_position = 2;</code>
+     * @return The gpsPosition.
+     */
+    context.ContextOuterClass.GPS_Position getGpsPosition();
+    /**
+     * <code>.context.GPS_Position gps_position = 2;</code>
+     */
+    context.ContextOuterClass.GPS_PositionOrBuilder getGpsPositionOrBuilder();
+
+    public context.ContextOuterClass.Location.LocationCase getLocationCase();
   }
   /**
-   * Protobuf type {@code context.GPS_Position}
+   * Protobuf type {@code context.Location}
    */
-  public static final class GPS_Position extends
+  public static final class Location extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.GPS_Position)
-      GPS_PositionOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Location)
+      LocationOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use GPS_Position.newBuilder() to construct.
-    private GPS_Position(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Location.newBuilder() to construct.
+    private Location(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private GPS_Position() {
+    private Location() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new GPS_Position();
+      return new Location();
     }
 
     @java.lang.Override
@@ -51530,7 +53110,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private GPS_Position(
+    private Location(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -51538,78 +53118,190 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            case 13: {
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
+              locationCase_ = 1;
+              location_ = s;
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.GPS_Position.Builder subBuilder = null;
+              if (locationCase_ == 2) {
+                subBuilder = ((context.ContextOuterClass.GPS_Position) location_).toBuilder();
+              }
+              location_ =
+                  input.readMessage(context.ContextOuterClass.GPS_Position.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom((context.ContextOuterClass.GPS_Position) location_);
+                location_ = subBuilder.buildPartial();
+              }
+              locationCase_ = 2;
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Location_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Location_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Location.class, context.ContextOuterClass.Location.Builder.class);
+    }
+
+    private int locationCase_ = 0;
+    private java.lang.Object location_;
+    public enum LocationCase
+        implements com.google.protobuf.Internal.EnumLite,
+            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+      REGION(1),
+      GPS_POSITION(2),
+      LOCATION_NOT_SET(0);
+      private final int value;
+      private LocationCase(int value) {
+        this.value = value;
+      }
+      /**
+       * @param value The number of the enum to look for.
+       * @return The enum associated with the given number.
+       * @deprecated Use {@link #forNumber(int)} instead.
+       */
+      @java.lang.Deprecated
+      public static LocationCase valueOf(int value) {
+        return forNumber(value);
+      }
+
+      public static LocationCase forNumber(int value) {
+        switch (value) {
+          case 1: return REGION;
+          case 2: return GPS_POSITION;
+          case 0: return LOCATION_NOT_SET;
+          default: return null;
+        }
+      }
+      public int getNumber() {
+        return this.value;
+      }
+    };
 
-              latitude_ = input.readFloat();
-              break;
-            }
-            case 21: {
+    public LocationCase
+    getLocationCase() {
+      return LocationCase.forNumber(
+          locationCase_);
+    }
 
-              longitude_ = input.readFloat();
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
+    public static final int REGION_FIELD_NUMBER = 1;
+    /**
+     * <code>string region = 1;</code>
+     * @return Whether the region field is set.
+     */
+    public boolean hasRegion() {
+      return locationCase_ == 1;
+    }
+    /**
+     * <code>string region = 1;</code>
+     * @return The region.
+     */
+    public java.lang.String getRegion() {
+      java.lang.Object ref = "";
+      if (locationCase_ == 1) {
+        ref = location_;
+      }
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (locationCase_ == 1) {
+          location_ = s;
         }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
+        return s;
       }
     }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_GPS_Position_descriptor;
+    /**
+     * <code>string region = 1;</code>
+     * @return The bytes for region.
+     */
+    public com.google.protobuf.ByteString
+        getRegionBytes() {
+      java.lang.Object ref = "";
+      if (locationCase_ == 1) {
+        ref = location_;
+      }
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        if (locationCase_ == 1) {
+          location_ = b;
+        }
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
+    public static final int GPS_POSITION_FIELD_NUMBER = 2;
+    /**
+     * <code>.context.GPS_Position gps_position = 2;</code>
+     * @return Whether the gpsPosition field is set.
+     */
     @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_GPS_Position_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.GPS_Position.class, context.ContextOuterClass.GPS_Position.Builder.class);
+    public boolean hasGpsPosition() {
+      return locationCase_ == 2;
     }
-
-    public static final int LATITUDE_FIELD_NUMBER = 1;
-    private float latitude_;
     /**
-     * <code>float latitude = 1;</code>
-     * @return The latitude.
+     * <code>.context.GPS_Position gps_position = 2;</code>
+     * @return The gpsPosition.
      */
     @java.lang.Override
-    public float getLatitude() {
-      return latitude_;
+    public context.ContextOuterClass.GPS_Position getGpsPosition() {
+      if (locationCase_ == 2) {
+         return (context.ContextOuterClass.GPS_Position) location_;
+      }
+      return context.ContextOuterClass.GPS_Position.getDefaultInstance();
     }
-
-    public static final int LONGITUDE_FIELD_NUMBER = 2;
-    private float longitude_;
     /**
-     * <code>float longitude = 2;</code>
-     * @return The longitude.
+     * <code>.context.GPS_Position gps_position = 2;</code>
      */
     @java.lang.Override
-    public float getLongitude() {
-      return longitude_;
+    public context.ContextOuterClass.GPS_PositionOrBuilder getGpsPositionOrBuilder() {
+      if (locationCase_ == 2) {
+         return (context.ContextOuterClass.GPS_Position) location_;
+      }
+      return context.ContextOuterClass.GPS_Position.getDefaultInstance();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -51626,11 +53318,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (latitude_ != 0F) {
-        output.writeFloat(1, latitude_);
+      if (locationCase_ == 1) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, location_);
       }
-      if (longitude_ != 0F) {
-        output.writeFloat(2, longitude_);
+      if (locationCase_ == 2) {
+        output.writeMessage(2, (context.ContextOuterClass.GPS_Position) location_);
       }
       unknownFields.writeTo(output);
     }
@@ -51641,13 +53333,12 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (latitude_ != 0F) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(1, latitude_);
+      if (locationCase_ == 1) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, location_);
       }
-      if (longitude_ != 0F) {
+      if (locationCase_ == 2) {
         size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(2, longitude_);
+          .computeMessageSize(2, (context.ContextOuterClass.GPS_Position) location_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -51659,17 +53350,24 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.GPS_Position)) {
+      if (!(obj instanceof context.ContextOuterClass.Location)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.GPS_Position other = (context.ContextOuterClass.GPS_Position) obj;
+      context.ContextOuterClass.Location other = (context.ContextOuterClass.Location) obj;
 
-      if (java.lang.Float.floatToIntBits(getLatitude())
-          != java.lang.Float.floatToIntBits(
-              other.getLatitude())) return false;
-      if (java.lang.Float.floatToIntBits(getLongitude())
-          != java.lang.Float.floatToIntBits(
-              other.getLongitude())) return false;
+      if (!getLocationCase().equals(other.getLocationCase())) return false;
+      switch (locationCase_) {
+        case 1:
+          if (!getRegion()
+              .equals(other.getRegion())) return false;
+          break;
+        case 2:
+          if (!getGpsPosition()
+              .equals(other.getGpsPosition())) return false;
+          break;
+        case 0:
+        default:
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -51681,80 +53379,86 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + LATITUDE_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getLatitude());
-      hash = (37 * hash) + LONGITUDE_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getLongitude());
+      switch (locationCase_) {
+        case 1:
+          hash = (37 * hash) + REGION_FIELD_NUMBER;
+          hash = (53 * hash) + getRegion().hashCode();
+          break;
+        case 2:
+          hash = (37 * hash) + GPS_POSITION_FIELD_NUMBER;
+          hash = (53 * hash) + getGpsPosition().hashCode();
+          break;
+        case 0:
+        default:
+      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.GPS_Position parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.GPS_Position parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.GPS_Position parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.GPS_Position parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.GPS_Position parseFrom(byte[] data)
+    public static context.ContextOuterClass.Location parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.GPS_Position parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.GPS_Position parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Location parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.GPS_Position parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.GPS_Position parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Location parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.GPS_Position parseDelimitedFrom(
+    public static context.ContextOuterClass.Location parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.GPS_Position parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.GPS_Position parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -51767,7 +53471,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.GPS_Position prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Location prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -51783,26 +53487,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.GPS_Position}
+     * Protobuf type {@code context.Location}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.GPS_Position)
-        context.ContextOuterClass.GPS_PositionOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Location)
+        context.ContextOuterClass.LocationOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_GPS_Position_descriptor;
+        return context.ContextOuterClass.internal_static_context_Location_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_GPS_Position_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Location_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.GPS_Position.class, context.ContextOuterClass.GPS_Position.Builder.class);
+                context.ContextOuterClass.Location.class, context.ContextOuterClass.Location.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.GPS_Position.newBuilder()
+      // Construct using context.ContextOuterClass.Location.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -51820,27 +53524,25 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        latitude_ = 0F;
-
-        longitude_ = 0F;
-
+        locationCase_ = 0;
+        location_ = null;
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_GPS_Position_descriptor;
+        return context.ContextOuterClass.internal_static_context_Location_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.GPS_Position getDefaultInstanceForType() {
-        return context.ContextOuterClass.GPS_Position.getDefaultInstance();
+      public context.ContextOuterClass.Location getDefaultInstanceForType() {
+        return context.ContextOuterClass.Location.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.GPS_Position build() {
-        context.ContextOuterClass.GPS_Position result = buildPartial();
+      public context.ContextOuterClass.Location build() {
+        context.ContextOuterClass.Location result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -51848,10 +53550,19 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.GPS_Position buildPartial() {
-        context.ContextOuterClass.GPS_Position result = new context.ContextOuterClass.GPS_Position(this);
-        result.latitude_ = latitude_;
-        result.longitude_ = longitude_;
+      public context.ContextOuterClass.Location buildPartial() {
+        context.ContextOuterClass.Location result = new context.ContextOuterClass.Location(this);
+        if (locationCase_ == 1) {
+          result.location_ = location_;
+        }
+        if (locationCase_ == 2) {
+          if (gpsPositionBuilder_ == null) {
+            result.location_ = location_;
+          } else {
+            result.location_ = gpsPositionBuilder_.build();
+          }
+        }
+        result.locationCase_ = locationCase_;
         onBuilt();
         return result;
       }
@@ -51890,21 +53601,30 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.GPS_Position) {
-          return mergeFrom((context.ContextOuterClass.GPS_Position)other);
+        if (other instanceof context.ContextOuterClass.Location) {
+          return mergeFrom((context.ContextOuterClass.Location)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.GPS_Position other) {
-        if (other == context.ContextOuterClass.GPS_Position.getDefaultInstance()) return this;
-        if (other.getLatitude() != 0F) {
-          setLatitude(other.getLatitude());
-        }
-        if (other.getLongitude() != 0F) {
-          setLongitude(other.getLongitude());
+      public Builder mergeFrom(context.ContextOuterClass.Location other) {
+        if (other == context.ContextOuterClass.Location.getDefaultInstance()) return this;
+        switch (other.getLocationCase()) {
+          case REGION: {
+            locationCase_ = 1;
+            location_ = other.location_;
+            onChanged();
+            break;
+          }
+          case GPS_POSITION: {
+            mergeGpsPosition(other.getGpsPosition());
+            break;
+          }
+          case LOCATION_NOT_SET: {
+            break;
+          }
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -51921,11 +53641,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.GPS_Position parsedMessage = null;
+        context.ContextOuterClass.Location parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.GPS_Position) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Location) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -51934,67 +53654,258 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int locationCase_ = 0;
+      private java.lang.Object location_;
+      public LocationCase
+          getLocationCase() {
+        return LocationCase.forNumber(
+            locationCase_);
+      }
+
+      public Builder clearLocation() {
+        locationCase_ = 0;
+        location_ = null;
+        onChanged();
+        return this;
+      }
+
 
-      private float latitude_ ;
       /**
-       * <code>float latitude = 1;</code>
-       * @return The latitude.
+       * <code>string region = 1;</code>
+       * @return Whether the region field is set.
        */
       @java.lang.Override
-      public float getLatitude() {
-        return latitude_;
+      public boolean hasRegion() {
+        return locationCase_ == 1;
       }
       /**
-       * <code>float latitude = 1;</code>
-       * @param value The latitude to set.
+       * <code>string region = 1;</code>
+       * @return The region.
+       */
+      @java.lang.Override
+      public java.lang.String getRegion() {
+        java.lang.Object ref = "";
+        if (locationCase_ == 1) {
+          ref = location_;
+        }
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          if (locationCase_ == 1) {
+            location_ = s;
+          }
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string region = 1;</code>
+       * @return The bytes for region.
+       */
+      @java.lang.Override
+      public com.google.protobuf.ByteString
+          getRegionBytes() {
+        java.lang.Object ref = "";
+        if (locationCase_ == 1) {
+          ref = location_;
+        }
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          if (locationCase_ == 1) {
+            location_ = b;
+          }
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string region = 1;</code>
+       * @param value The region to set.
        * @return This builder for chaining.
        */
-      public Builder setLatitude(float value) {
-        
-        latitude_ = value;
+      public Builder setRegion(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  locationCase_ = 1;
+        location_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>float latitude = 1;</code>
+       * <code>string region = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder clearLatitude() {
-        
-        latitude_ = 0F;
+      public Builder clearRegion() {
+        if (locationCase_ == 1) {
+          locationCase_ = 0;
+          location_ = null;
+          onChanged();
+        }
+        return this;
+      }
+      /**
+       * <code>string region = 1;</code>
+       * @param value The bytes for region to set.
+       * @return This builder for chaining.
+       */
+      public Builder setRegionBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        locationCase_ = 1;
+        location_ = value;
         onChanged();
         return this;
       }
 
-      private float longitude_ ;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.GPS_Position, context.ContextOuterClass.GPS_Position.Builder, context.ContextOuterClass.GPS_PositionOrBuilder> gpsPositionBuilder_;
       /**
-       * <code>float longitude = 2;</code>
-       * @return The longitude.
+       * <code>.context.GPS_Position gps_position = 2;</code>
+       * @return Whether the gpsPosition field is set.
        */
       @java.lang.Override
-      public float getLongitude() {
-        return longitude_;
+      public boolean hasGpsPosition() {
+        return locationCase_ == 2;
       }
       /**
-       * <code>float longitude = 2;</code>
-       * @param value The longitude to set.
-       * @return This builder for chaining.
+       * <code>.context.GPS_Position gps_position = 2;</code>
+       * @return The gpsPosition.
        */
-      public Builder setLongitude(float value) {
-        
-        longitude_ = value;
-        onChanged();
+      @java.lang.Override
+      public context.ContextOuterClass.GPS_Position getGpsPosition() {
+        if (gpsPositionBuilder_ == null) {
+          if (locationCase_ == 2) {
+            return (context.ContextOuterClass.GPS_Position) location_;
+          }
+          return context.ContextOuterClass.GPS_Position.getDefaultInstance();
+        } else {
+          if (locationCase_ == 2) {
+            return gpsPositionBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.GPS_Position.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.GPS_Position gps_position = 2;</code>
+       */
+      public Builder setGpsPosition(context.ContextOuterClass.GPS_Position value) {
+        if (gpsPositionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          location_ = value;
+          onChanged();
+        } else {
+          gpsPositionBuilder_.setMessage(value);
+        }
+        locationCase_ = 2;
+        return this;
+      }
+      /**
+       * <code>.context.GPS_Position gps_position = 2;</code>
+       */
+      public Builder setGpsPosition(
+          context.ContextOuterClass.GPS_Position.Builder builderForValue) {
+        if (gpsPositionBuilder_ == null) {
+          location_ = builderForValue.build();
+          onChanged();
+        } else {
+          gpsPositionBuilder_.setMessage(builderForValue.build());
+        }
+        locationCase_ = 2;
+        return this;
+      }
+      /**
+       * <code>.context.GPS_Position gps_position = 2;</code>
+       */
+      public Builder mergeGpsPosition(context.ContextOuterClass.GPS_Position value) {
+        if (gpsPositionBuilder_ == null) {
+          if (locationCase_ == 2 &&
+              location_ != context.ContextOuterClass.GPS_Position.getDefaultInstance()) {
+            location_ = context.ContextOuterClass.GPS_Position.newBuilder((context.ContextOuterClass.GPS_Position) location_)
+                .mergeFrom(value).buildPartial();
+          } else {
+            location_ = value;
+          }
+          onChanged();
+        } else {
+          if (locationCase_ == 2) {
+            gpsPositionBuilder_.mergeFrom(value);
+          }
+          gpsPositionBuilder_.setMessage(value);
+        }
+        locationCase_ = 2;
+        return this;
+      }
+      /**
+       * <code>.context.GPS_Position gps_position = 2;</code>
+       */
+      public Builder clearGpsPosition() {
+        if (gpsPositionBuilder_ == null) {
+          if (locationCase_ == 2) {
+            locationCase_ = 0;
+            location_ = null;
+            onChanged();
+          }
+        } else {
+          if (locationCase_ == 2) {
+            locationCase_ = 0;
+            location_ = null;
+          }
+          gpsPositionBuilder_.clear();
+        }
         return this;
       }
       /**
-       * <code>float longitude = 2;</code>
-       * @return This builder for chaining.
+       * <code>.context.GPS_Position gps_position = 2;</code>
+       */
+      public context.ContextOuterClass.GPS_Position.Builder getGpsPositionBuilder() {
+        return getGpsPositionFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.GPS_Position gps_position = 2;</code>
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.GPS_PositionOrBuilder getGpsPositionOrBuilder() {
+        if ((locationCase_ == 2) && (gpsPositionBuilder_ != null)) {
+          return gpsPositionBuilder_.getMessageOrBuilder();
+        } else {
+          if (locationCase_ == 2) {
+            return (context.ContextOuterClass.GPS_Position) location_;
+          }
+          return context.ContextOuterClass.GPS_Position.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.GPS_Position gps_position = 2;</code>
        */
-      public Builder clearLongitude() {
-        
-        longitude_ = 0F;
-        onChanged();
-        return this;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.GPS_Position, context.ContextOuterClass.GPS_Position.Builder, context.ContextOuterClass.GPS_PositionOrBuilder> 
+          getGpsPositionFieldBuilder() {
+        if (gpsPositionBuilder_ == null) {
+          if (!(locationCase_ == 2)) {
+            location_ = context.ContextOuterClass.GPS_Position.getDefaultInstance();
+          }
+          gpsPositionBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.GPS_Position, context.ContextOuterClass.GPS_Position.Builder, context.ContextOuterClass.GPS_PositionOrBuilder>(
+                  (context.ContextOuterClass.GPS_Position) location_,
+                  getParentForChildren(),
+                  isClean());
+          location_ = null;
+        }
+        locationCase_ = 2;
+        onChanged();;
+        return gpsPositionBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -52009,104 +53920,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.GPS_Position)
+      // @@protoc_insertion_point(builder_scope:context.Location)
     }
 
-    // @@protoc_insertion_point(class_scope:context.GPS_Position)
-    private static final context.ContextOuterClass.GPS_Position DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Location)
+    private static final context.ContextOuterClass.Location DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.GPS_Position();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Location();
     }
 
-    public static context.ContextOuterClass.GPS_Position getDefaultInstance() {
+    public static context.ContextOuterClass.Location getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<GPS_Position>
-        PARSER = new com.google.protobuf.AbstractParser<GPS_Position>() {
+    private static final com.google.protobuf.Parser<Location>
+        PARSER = new com.google.protobuf.AbstractParser<Location>() {
       @java.lang.Override
-      public GPS_Position parsePartialFrom(
+      public Location parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new GPS_Position(input, extensionRegistry);
+        return new Location(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<GPS_Position> parser() {
+    public static com.google.protobuf.Parser<Location> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<GPS_Position> getParserForType() {
+    public com.google.protobuf.Parser<Location> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.GPS_Position getDefaultInstanceForType() {
+    public context.ContextOuterClass.Location getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface LocationOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Location)
+  public interface Constraint_EndPointLocationOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_EndPointLocation)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>string region = 1;</code>
-     * @return Whether the region field is set.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
-    boolean hasRegion();
+    boolean hasEndpointId();
     /**
-     * <code>string region = 1;</code>
-     * @return The region.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
-    java.lang.String getRegion();
+    context.ContextOuterClass.EndPointId getEndpointId();
     /**
-     * <code>string region = 1;</code>
-     * @return The bytes for region.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
      */
-    com.google.protobuf.ByteString
-        getRegionBytes();
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
 
     /**
-     * <code>.context.GPS_Position gps_position = 2;</code>
-     * @return Whether the gpsPosition field is set.
+     * <code>.context.Location location = 2;</code>
+     * @return Whether the location field is set.
      */
-    boolean hasGpsPosition();
+    boolean hasLocation();
     /**
-     * <code>.context.GPS_Position gps_position = 2;</code>
-     * @return The gpsPosition.
+     * <code>.context.Location location = 2;</code>
+     * @return The location.
      */
-    context.ContextOuterClass.GPS_Position getGpsPosition();
+    context.ContextOuterClass.Location getLocation();
     /**
-     * <code>.context.GPS_Position gps_position = 2;</code>
+     * <code>.context.Location location = 2;</code>
      */
-    context.ContextOuterClass.GPS_PositionOrBuilder getGpsPositionOrBuilder();
-
-    public context.ContextOuterClass.Location.LocationCase getLocationCase();
+    context.ContextOuterClass.LocationOrBuilder getLocationOrBuilder();
   }
   /**
-   * Protobuf type {@code context.Location}
+   * Protobuf type {@code context.Constraint_EndPointLocation}
    */
-  public static final class Location extends
+  public static final class Constraint_EndPointLocation extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Location)
-      LocationOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Constraint_EndPointLocation)
+      Constraint_EndPointLocationOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Location.newBuilder() to construct.
-    private Location(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Constraint_EndPointLocation.newBuilder() to construct.
+    private Constraint_EndPointLocation(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Location() {
+    private Constraint_EndPointLocation() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Location();
+      return new Constraint_EndPointLocation();
     }
 
     @java.lang.Override
@@ -52114,7 +54021,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Location(
+    private Constraint_EndPointLocation(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -52133,23 +54040,29 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              java.lang.String s = input.readStringRequireUtf8();
-              locationCase_ = 1;
-              location_ = s;
+              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
+              if (endpointId_ != null) {
+                subBuilder = endpointId_.toBuilder();
+              }
+              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endpointId_);
+                endpointId_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             case 18: {
-              context.ContextOuterClass.GPS_Position.Builder subBuilder = null;
-              if (locationCase_ == 2) {
-                subBuilder = ((context.ContextOuterClass.GPS_Position) location_).toBuilder();
+              context.ContextOuterClass.Location.Builder subBuilder = null;
+              if (location_ != null) {
+                subBuilder = location_.toBuilder();
               }
-              location_ =
-                  input.readMessage(context.ContextOuterClass.GPS_Position.parser(), extensionRegistry);
+              location_ = input.readMessage(context.ContextOuterClass.Location.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom((context.ContextOuterClass.GPS_Position) location_);
+                subBuilder.mergeFrom(location_);
                 location_ = subBuilder.buildPartial();
               }
-              locationCase_ = 2;
+
               break;
             }
             default: {
@@ -52173,139 +54086,67 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Location_descriptor;
+      return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Location_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Location.class, context.ContextOuterClass.Location.Builder.class);
-    }
-
-    private int locationCase_ = 0;
-    private java.lang.Object location_;
-    public enum LocationCase
-        implements com.google.protobuf.Internal.EnumLite,
-            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
-      REGION(1),
-      GPS_POSITION(2),
-      LOCATION_NOT_SET(0);
-      private final int value;
-      private LocationCase(int value) {
-        this.value = value;
-      }
-      /**
-       * @param value The number of the enum to look for.
-       * @return The enum associated with the given number.
-       * @deprecated Use {@link #forNumber(int)} instead.
-       */
-      @java.lang.Deprecated
-      public static LocationCase valueOf(int value) {
-        return forNumber(value);
-      }
-
-      public static LocationCase forNumber(int value) {
-        switch (value) {
-          case 1: return REGION;
-          case 2: return GPS_POSITION;
-          case 0: return LOCATION_NOT_SET;
-          default: return null;
-        }
-      }
-      public int getNumber() {
-        return this.value;
-      }
-    };
-
-    public LocationCase
-    getLocationCase() {
-      return LocationCase.forNumber(
-          locationCase_);
+              context.ContextOuterClass.Constraint_EndPointLocation.class, context.ContextOuterClass.Constraint_EndPointLocation.Builder.class);
     }
 
-    public static final int REGION_FIELD_NUMBER = 1;
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.EndPointId endpointId_;
     /**
-     * <code>string region = 1;</code>
-     * @return Whether the region field is set.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
-    public boolean hasRegion() {
-      return locationCase_ == 1;
+    @java.lang.Override
+    public boolean hasEndpointId() {
+      return endpointId_ != null;
     }
     /**
-     * <code>string region = 1;</code>
-     * @return The region.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
-    public java.lang.String getRegion() {
-      java.lang.Object ref = "";
-      if (locationCase_ == 1) {
-        ref = location_;
-      }
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        if (locationCase_ == 1) {
-          location_ = s;
-        }
-        return s;
-      }
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getEndpointId() {
+      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
     }
     /**
-     * <code>string region = 1;</code>
-     * @return The bytes for region.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
      */
-    public com.google.protobuf.ByteString
-        getRegionBytes() {
-      java.lang.Object ref = "";
-      if (locationCase_ == 1) {
-        ref = location_;
-      }
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        if (locationCase_ == 1) {
-          location_ = b;
-        }
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+      return getEndpointId();
     }
 
-    public static final int GPS_POSITION_FIELD_NUMBER = 2;
-    /**
-     * <code>.context.GPS_Position gps_position = 2;</code>
-     * @return Whether the gpsPosition field is set.
+    public static final int LOCATION_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.Location location_;
+    /**
+     * <code>.context.Location location = 2;</code>
+     * @return Whether the location field is set.
      */
     @java.lang.Override
-    public boolean hasGpsPosition() {
-      return locationCase_ == 2;
+    public boolean hasLocation() {
+      return location_ != null;
     }
     /**
-     * <code>.context.GPS_Position gps_position = 2;</code>
-     * @return The gpsPosition.
+     * <code>.context.Location location = 2;</code>
+     * @return The location.
      */
     @java.lang.Override
-    public context.ContextOuterClass.GPS_Position getGpsPosition() {
-      if (locationCase_ == 2) {
-         return (context.ContextOuterClass.GPS_Position) location_;
-      }
-      return context.ContextOuterClass.GPS_Position.getDefaultInstance();
+    public context.ContextOuterClass.Location getLocation() {
+      return location_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : location_;
     }
     /**
-     * <code>.context.GPS_Position gps_position = 2;</code>
+     * <code>.context.Location location = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.GPS_PositionOrBuilder getGpsPositionOrBuilder() {
-      if (locationCase_ == 2) {
-         return (context.ContextOuterClass.GPS_Position) location_;
-      }
-      return context.ContextOuterClass.GPS_Position.getDefaultInstance();
+    public context.ContextOuterClass.LocationOrBuilder getLocationOrBuilder() {
+      return getLocation();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -52322,11 +54163,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (locationCase_ == 1) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, location_);
+      if (endpointId_ != null) {
+        output.writeMessage(1, getEndpointId());
       }
-      if (locationCase_ == 2) {
-        output.writeMessage(2, (context.ContextOuterClass.GPS_Position) location_);
+      if (location_ != null) {
+        output.writeMessage(2, getLocation());
       }
       unknownFields.writeTo(output);
     }
@@ -52337,12 +54178,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (locationCase_ == 1) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, location_);
+      if (endpointId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getEndpointId());
       }
-      if (locationCase_ == 2) {
+      if (location_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, (context.ContextOuterClass.GPS_Position) location_);
+          .computeMessageSize(2, getLocation());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -52354,23 +54196,20 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Location)) {
+      if (!(obj instanceof context.ContextOuterClass.Constraint_EndPointLocation)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Location other = (context.ContextOuterClass.Location) obj;
+      context.ContextOuterClass.Constraint_EndPointLocation other = (context.ContextOuterClass.Constraint_EndPointLocation) obj;
 
-      if (!getLocationCase().equals(other.getLocationCase())) return false;
-      switch (locationCase_) {
-        case 1:
-          if (!getRegion()
-              .equals(other.getRegion())) return false;
-          break;
-        case 2:
-          if (!getGpsPosition()
-              .equals(other.getGpsPosition())) return false;
-          break;
-        case 0:
-        default:
+      if (hasEndpointId() != other.hasEndpointId()) return false;
+      if (hasEndpointId()) {
+        if (!getEndpointId()
+            .equals(other.getEndpointId())) return false;
+      }
+      if (hasLocation() != other.hasLocation()) return false;
+      if (hasLocation()) {
+        if (!getLocation()
+            .equals(other.getLocation())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -52383,86 +54222,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      switch (locationCase_) {
-        case 1:
-          hash = (37 * hash) + REGION_FIELD_NUMBER;
-          hash = (53 * hash) + getRegion().hashCode();
-          break;
-        case 2:
-          hash = (37 * hash) + GPS_POSITION_FIELD_NUMBER;
-          hash = (53 * hash) + getGpsPosition().hashCode();
-          break;
-        case 0:
-        default:
+      if (hasEndpointId()) {
+        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointId().hashCode();
+      }
+      if (hasLocation()) {
+        hash = (37 * hash) + LOCATION_FIELD_NUMBER;
+        hash = (53 * hash) + getLocation().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Location parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Location parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Location parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Location parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Location parseFrom(byte[] data)
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Location parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Location parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Location parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Location parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Location parseDelimitedFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Location parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Location parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -52475,7 +54310,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Location prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Constraint_EndPointLocation prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -52491,26 +54326,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Location}
+     * Protobuf type {@code context.Constraint_EndPointLocation}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Location)
-        context.ContextOuterClass.LocationOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Constraint_EndPointLocation)
+        context.ContextOuterClass.Constraint_EndPointLocationOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Location_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Location_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Location.class, context.ContextOuterClass.Location.Builder.class);
+                context.ContextOuterClass.Constraint_EndPointLocation.class, context.ContextOuterClass.Constraint_EndPointLocation.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Location.newBuilder()
+      // Construct using context.ContextOuterClass.Constraint_EndPointLocation.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -52528,25 +54363,35 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        locationCase_ = 0;
-        location_ = null;
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+        if (locationBuilder_ == null) {
+          location_ = null;
+        } else {
+          location_ = null;
+          locationBuilder_ = null;
+        }
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Location_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Location getDefaultInstanceForType() {
-        return context.ContextOuterClass.Location.getDefaultInstance();
+      public context.ContextOuterClass.Constraint_EndPointLocation getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Location build() {
-        context.ContextOuterClass.Location result = buildPartial();
+      public context.ContextOuterClass.Constraint_EndPointLocation build() {
+        context.ContextOuterClass.Constraint_EndPointLocation result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -52554,19 +54399,18 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Location buildPartial() {
-        context.ContextOuterClass.Location result = new context.ContextOuterClass.Location(this);
-        if (locationCase_ == 1) {
-          result.location_ = location_;
+      public context.ContextOuterClass.Constraint_EndPointLocation buildPartial() {
+        context.ContextOuterClass.Constraint_EndPointLocation result = new context.ContextOuterClass.Constraint_EndPointLocation(this);
+        if (endpointIdBuilder_ == null) {
+          result.endpointId_ = endpointId_;
+        } else {
+          result.endpointId_ = endpointIdBuilder_.build();
         }
-        if (locationCase_ == 2) {
-          if (gpsPositionBuilder_ == null) {
-            result.location_ = location_;
-          } else {
-            result.location_ = gpsPositionBuilder_.build();
-          }
+        if (locationBuilder_ == null) {
+          result.location_ = location_;
+        } else {
+          result.location_ = locationBuilder_.build();
         }
-        result.locationCase_ = locationCase_;
         onBuilt();
         return result;
       }
@@ -52605,30 +54449,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Location) {
-          return mergeFrom((context.ContextOuterClass.Location)other);
+        if (other instanceof context.ContextOuterClass.Constraint_EndPointLocation) {
+          return mergeFrom((context.ContextOuterClass.Constraint_EndPointLocation)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Location other) {
-        if (other == context.ContextOuterClass.Location.getDefaultInstance()) return this;
-        switch (other.getLocationCase()) {
-          case REGION: {
-            locationCase_ = 1;
-            location_ = other.location_;
-            onChanged();
-            break;
-          }
-          case GPS_POSITION: {
-            mergeGpsPosition(other.getGpsPosition());
-            break;
-          }
-          case LOCATION_NOT_SET: {
-            break;
-          }
+      public Builder mergeFrom(context.ContextOuterClass.Constraint_EndPointLocation other) {
+        if (other == context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance()) return this;
+        if (other.hasEndpointId()) {
+          mergeEndpointId(other.getEndpointId());
+        }
+        if (other.hasLocation()) {
+          mergeLocation(other.getLocation());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -52645,11 +54480,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Location parsedMessage = null;
+        context.ContextOuterClass.Constraint_EndPointLocation parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Location) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Constraint_EndPointLocation) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -52658,258 +54493,243 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int locationCase_ = 0;
-      private java.lang.Object location_;
-      public LocationCase
-          getLocationCase() {
-        return LocationCase.forNumber(
-            locationCase_);
-      }
-
-      public Builder clearLocation() {
-        locationCase_ = 0;
-        location_ = null;
-        onChanged();
-        return this;
-      }
-
 
+      private context.ContextOuterClass.EndPointId endpointId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
       /**
-       * <code>string region = 1;</code>
-       * @return Whether the region field is set.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return Whether the endpointId field is set.
        */
-      @java.lang.Override
-      public boolean hasRegion() {
-        return locationCase_ == 1;
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
       }
       /**
-       * <code>string region = 1;</code>
-       * @return The region.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return The endpointId.
        */
-      @java.lang.Override
-      public java.lang.String getRegion() {
-        java.lang.Object ref = "";
-        if (locationCase_ == 1) {
-          ref = location_;
+      public context.ContextOuterClass.EndPointId getEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        } else {
+          return endpointIdBuilder_.getMessage();
         }
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          if (locationCase_ == 1) {
-            location_ = s;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
-          return s;
+          endpointId_ = value;
+          onChanged();
         } else {
-          return (java.lang.String) ref;
+          endpointIdBuilder_.setMessage(value);
         }
+
+        return this;
       }
       /**
-       * <code>string region = 1;</code>
-       * @return The bytes for region.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      @java.lang.Override
-      public com.google.protobuf.ByteString
-          getRegionBytes() {
-        java.lang.Object ref = "";
-        if (locationCase_ == 1) {
-          ref = location_;
-        }
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          if (locationCase_ == 1) {
-            location_ = b;
-          }
-          return b;
+      public Builder setEndpointId(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = builderForValue.build();
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          endpointIdBuilder_.setMessage(builderForValue.build());
         }
+
+        return this;
       }
       /**
-       * <code>string region = 1;</code>
-       * @param value The region to set.
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setRegion(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  locationCase_ = 1;
-        location_ = value;
-        onChanged();
+      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (endpointId_ != null) {
+            endpointId_ =
+              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+          } else {
+            endpointId_ = value;
+          }
+          onChanged();
+        } else {
+          endpointIdBuilder_.mergeFrom(value);
+        }
+
         return this;
       }
       /**
-       * <code>string region = 1;</code>
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder clearRegion() {
-        if (locationCase_ == 1) {
-          locationCase_ = 0;
-          location_ = null;
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
           onChanged();
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>string region = 1;</code>
-       * @param value The bytes for region to set.
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setRegionBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        locationCase_ = 1;
-        location_ = value;
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+        
         onChanged();
-        return this;
+        return getEndpointIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+        if (endpointIdBuilder_ != null) {
+          return endpointIdBuilder_.getMessageOrBuilder();
+        } else {
+          return endpointId_ == null ?
+              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        }
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getEndpointIdFieldBuilder() {
+        if (endpointIdBuilder_ == null) {
+          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  getEndpointId(),
+                  getParentForChildren(),
+                  isClean());
+          endpointId_ = null;
+        }
+        return endpointIdBuilder_;
       }
 
+      private context.ContextOuterClass.Location location_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.GPS_Position, context.ContextOuterClass.GPS_Position.Builder, context.ContextOuterClass.GPS_PositionOrBuilder> gpsPositionBuilder_;
+          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> locationBuilder_;
       /**
-       * <code>.context.GPS_Position gps_position = 2;</code>
-       * @return Whether the gpsPosition field is set.
+       * <code>.context.Location location = 2;</code>
+       * @return Whether the location field is set.
        */
-      @java.lang.Override
-      public boolean hasGpsPosition() {
-        return locationCase_ == 2;
+      public boolean hasLocation() {
+        return locationBuilder_ != null || location_ != null;
       }
       /**
-       * <code>.context.GPS_Position gps_position = 2;</code>
-       * @return The gpsPosition.
+       * <code>.context.Location location = 2;</code>
+       * @return The location.
        */
-      @java.lang.Override
-      public context.ContextOuterClass.GPS_Position getGpsPosition() {
-        if (gpsPositionBuilder_ == null) {
-          if (locationCase_ == 2) {
-            return (context.ContextOuterClass.GPS_Position) location_;
-          }
-          return context.ContextOuterClass.GPS_Position.getDefaultInstance();
+      public context.ContextOuterClass.Location getLocation() {
+        if (locationBuilder_ == null) {
+          return location_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : location_;
         } else {
-          if (locationCase_ == 2) {
-            return gpsPositionBuilder_.getMessage();
-          }
-          return context.ContextOuterClass.GPS_Position.getDefaultInstance();
+          return locationBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.GPS_Position gps_position = 2;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      public Builder setGpsPosition(context.ContextOuterClass.GPS_Position value) {
-        if (gpsPositionBuilder_ == null) {
+      public Builder setLocation(context.ContextOuterClass.Location value) {
+        if (locationBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
           location_ = value;
           onChanged();
         } else {
-          gpsPositionBuilder_.setMessage(value);
+          locationBuilder_.setMessage(value);
         }
-        locationCase_ = 2;
+
         return this;
       }
       /**
-       * <code>.context.GPS_Position gps_position = 2;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      public Builder setGpsPosition(
-          context.ContextOuterClass.GPS_Position.Builder builderForValue) {
-        if (gpsPositionBuilder_ == null) {
+      public Builder setLocation(
+          context.ContextOuterClass.Location.Builder builderForValue) {
+        if (locationBuilder_ == null) {
           location_ = builderForValue.build();
           onChanged();
         } else {
-          gpsPositionBuilder_.setMessage(builderForValue.build());
+          locationBuilder_.setMessage(builderForValue.build());
         }
-        locationCase_ = 2;
+
         return this;
       }
       /**
-       * <code>.context.GPS_Position gps_position = 2;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      public Builder mergeGpsPosition(context.ContextOuterClass.GPS_Position value) {
-        if (gpsPositionBuilder_ == null) {
-          if (locationCase_ == 2 &&
-              location_ != context.ContextOuterClass.GPS_Position.getDefaultInstance()) {
-            location_ = context.ContextOuterClass.GPS_Position.newBuilder((context.ContextOuterClass.GPS_Position) location_)
-                .mergeFrom(value).buildPartial();
+      public Builder mergeLocation(context.ContextOuterClass.Location value) {
+        if (locationBuilder_ == null) {
+          if (location_ != null) {
+            location_ =
+              context.ContextOuterClass.Location.newBuilder(location_).mergeFrom(value).buildPartial();
           } else {
             location_ = value;
           }
           onChanged();
         } else {
-          if (locationCase_ == 2) {
-            gpsPositionBuilder_.mergeFrom(value);
-          }
-          gpsPositionBuilder_.setMessage(value);
+          locationBuilder_.mergeFrom(value);
         }
-        locationCase_ = 2;
+
         return this;
       }
       /**
-       * <code>.context.GPS_Position gps_position = 2;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      public Builder clearGpsPosition() {
-        if (gpsPositionBuilder_ == null) {
-          if (locationCase_ == 2) {
-            locationCase_ = 0;
-            location_ = null;
-            onChanged();
-          }
+      public Builder clearLocation() {
+        if (locationBuilder_ == null) {
+          location_ = null;
+          onChanged();
         } else {
-          if (locationCase_ == 2) {
-            locationCase_ = 0;
-            location_ = null;
-          }
-          gpsPositionBuilder_.clear();
+          location_ = null;
+          locationBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>.context.GPS_Position gps_position = 2;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      public context.ContextOuterClass.GPS_Position.Builder getGpsPositionBuilder() {
-        return getGpsPositionFieldBuilder().getBuilder();
+      public context.ContextOuterClass.Location.Builder getLocationBuilder() {
+        
+        onChanged();
+        return getLocationFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.GPS_Position gps_position = 2;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      @java.lang.Override
-      public context.ContextOuterClass.GPS_PositionOrBuilder getGpsPositionOrBuilder() {
-        if ((locationCase_ == 2) && (gpsPositionBuilder_ != null)) {
-          return gpsPositionBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.LocationOrBuilder getLocationOrBuilder() {
+        if (locationBuilder_ != null) {
+          return locationBuilder_.getMessageOrBuilder();
         } else {
-          if (locationCase_ == 2) {
-            return (context.ContextOuterClass.GPS_Position) location_;
-          }
-          return context.ContextOuterClass.GPS_Position.getDefaultInstance();
+          return location_ == null ?
+              context.ContextOuterClass.Location.getDefaultInstance() : location_;
         }
       }
       /**
-       * <code>.context.GPS_Position gps_position = 2;</code>
+       * <code>.context.Location location = 2;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.GPS_Position, context.ContextOuterClass.GPS_Position.Builder, context.ContextOuterClass.GPS_PositionOrBuilder> 
-          getGpsPositionFieldBuilder() {
-        if (gpsPositionBuilder_ == null) {
-          if (!(locationCase_ == 2)) {
-            location_ = context.ContextOuterClass.GPS_Position.getDefaultInstance();
-          }
-          gpsPositionBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.GPS_Position, context.ContextOuterClass.GPS_Position.Builder, context.ContextOuterClass.GPS_PositionOrBuilder>(
-                  (context.ContextOuterClass.GPS_Position) location_,
+          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> 
+          getLocationFieldBuilder() {
+        if (locationBuilder_ == null) {
+          locationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder>(
+                  getLocation(),
                   getParentForChildren(),
                   isClean());
           location_ = null;
         }
-        locationCase_ = 2;
-        onChanged();;
-        return gpsPositionBuilder_;
+        return locationBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -52924,48 +54744,48 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Location)
+      // @@protoc_insertion_point(builder_scope:context.Constraint_EndPointLocation)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Location)
-    private static final context.ContextOuterClass.Location DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Constraint_EndPointLocation)
+    private static final context.ContextOuterClass.Constraint_EndPointLocation DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Location();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_EndPointLocation();
     }
 
-    public static context.ContextOuterClass.Location getDefaultInstance() {
+    public static context.ContextOuterClass.Constraint_EndPointLocation getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Location>
-        PARSER = new com.google.protobuf.AbstractParser<Location>() {
+    private static final com.google.protobuf.Parser<Constraint_EndPointLocation>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_EndPointLocation>() {
       @java.lang.Override
-      public Location parsePartialFrom(
+      public Constraint_EndPointLocation parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Location(input, extensionRegistry);
+        return new Constraint_EndPointLocation(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Location> parser() {
+    public static com.google.protobuf.Parser<Constraint_EndPointLocation> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Location> getParserForType() {
+    public com.google.protobuf.Parser<Constraint_EndPointLocation> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Location getDefaultInstanceForType() {
+    public context.ContextOuterClass.Constraint_EndPointLocation getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface Constraint_EndPointLocationOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Constraint_EndPointLocation)
+  public interface Constraint_EndPointPriorityOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_EndPointPriority)
       com.google.protobuf.MessageOrBuilder {
 
     /**
@@ -52984,40 +54804,31 @@ public final class ContextOuterClass {
     context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
 
     /**
-     * <code>.context.Location location = 2;</code>
-     * @return Whether the location field is set.
-     */
-    boolean hasLocation();
-    /**
-     * <code>.context.Location location = 2;</code>
-     * @return The location.
-     */
-    context.ContextOuterClass.Location getLocation();
-    /**
-     * <code>.context.Location location = 2;</code>
+     * <code>uint32 priority = 2;</code>
+     * @return The priority.
      */
-    context.ContextOuterClass.LocationOrBuilder getLocationOrBuilder();
+    int getPriority();
   }
   /**
-   * Protobuf type {@code context.Constraint_EndPointLocation}
+   * Protobuf type {@code context.Constraint_EndPointPriority}
    */
-  public static final class Constraint_EndPointLocation extends
+  public static final class Constraint_EndPointPriority extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Constraint_EndPointLocation)
-      Constraint_EndPointLocationOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Constraint_EndPointPriority)
+      Constraint_EndPointPriorityOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Constraint_EndPointLocation.newBuilder() to construct.
-    private Constraint_EndPointLocation(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Constraint_EndPointPriority.newBuilder() to construct.
+    private Constraint_EndPointPriority(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Constraint_EndPointLocation() {
+    private Constraint_EndPointPriority() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Constraint_EndPointLocation();
+      return new Constraint_EndPointPriority();
     }
 
     @java.lang.Override
@@ -53025,7 +54836,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Constraint_EndPointLocation(
+    private Constraint_EndPointPriority(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -53056,17 +54867,9 @@ public final class ContextOuterClass {
 
               break;
             }
-            case 18: {
-              context.ContextOuterClass.Location.Builder subBuilder = null;
-              if (location_ != null) {
-                subBuilder = location_.toBuilder();
-              }
-              location_ = input.readMessage(context.ContextOuterClass.Location.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(location_);
-                location_ = subBuilder.buildPartial();
-              }
+            case 16: {
 
+              priority_ = input.readUInt32();
               break;
             }
             default: {
@@ -53090,15 +54893,15 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_descriptor;
+      return context.ContextOuterClass.internal_static_context_Constraint_EndPointPriority_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Constraint_EndPointPriority_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Constraint_EndPointLocation.class, context.ContextOuterClass.Constraint_EndPointLocation.Builder.class);
+              context.ContextOuterClass.Constraint_EndPointPriority.class, context.ContextOuterClass.Constraint_EndPointPriority.Builder.class);
     }
 
     public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
@@ -53127,30 +54930,15 @@ public final class ContextOuterClass {
       return getEndpointId();
     }
 
-    public static final int LOCATION_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.Location location_;
-    /**
-     * <code>.context.Location location = 2;</code>
-     * @return Whether the location field is set.
-     */
-    @java.lang.Override
-    public boolean hasLocation() {
-      return location_ != null;
-    }
-    /**
-     * <code>.context.Location location = 2;</code>
-     * @return The location.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.Location getLocation() {
-      return location_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : location_;
-    }
+    public static final int PRIORITY_FIELD_NUMBER = 2;
+    private int priority_;
     /**
-     * <code>.context.Location location = 2;</code>
+     * <code>uint32 priority = 2;</code>
+     * @return The priority.
      */
     @java.lang.Override
-    public context.ContextOuterClass.LocationOrBuilder getLocationOrBuilder() {
-      return getLocation();
+    public int getPriority() {
+      return priority_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -53170,8 +54958,8 @@ public final class ContextOuterClass {
       if (endpointId_ != null) {
         output.writeMessage(1, getEndpointId());
       }
-      if (location_ != null) {
-        output.writeMessage(2, getLocation());
+      if (priority_ != 0) {
+        output.writeUInt32(2, priority_);
       }
       unknownFields.writeTo(output);
     }
@@ -53186,9 +54974,9 @@ public final class ContextOuterClass {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(1, getEndpointId());
       }
-      if (location_ != null) {
+      if (priority_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getLocation());
+          .computeUInt32Size(2, priority_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -53200,21 +54988,18 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Constraint_EndPointLocation)) {
+      if (!(obj instanceof context.ContextOuterClass.Constraint_EndPointPriority)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Constraint_EndPointLocation other = (context.ContextOuterClass.Constraint_EndPointLocation) obj;
+      context.ContextOuterClass.Constraint_EndPointPriority other = (context.ContextOuterClass.Constraint_EndPointPriority) obj;
 
       if (hasEndpointId() != other.hasEndpointId()) return false;
       if (hasEndpointId()) {
         if (!getEndpointId()
             .equals(other.getEndpointId())) return false;
       }
-      if (hasLocation() != other.hasLocation()) return false;
-      if (hasLocation()) {
-        if (!getLocation()
-            .equals(other.getLocation())) return false;
-      }
+      if (getPriority()
+          != other.getPriority()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -53230,78 +55015,76 @@ public final class ContextOuterClass {
         hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
         hash = (53 * hash) + getEndpointId().hashCode();
       }
-      if (hasLocation()) {
-        hash = (37 * hash) + LOCATION_FIELD_NUMBER;
-        hash = (53 * hash) + getLocation().hashCode();
-      }
+      hash = (37 * hash) + PRIORITY_FIELD_NUMBER;
+      hash = (53 * hash) + getPriority();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(byte[] data)
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseDelimitedFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -53314,7 +55097,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Constraint_EndPointLocation prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Constraint_EndPointPriority prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -53330,26 +55113,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Constraint_EndPointLocation}
+     * Protobuf type {@code context.Constraint_EndPointPriority}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Constraint_EndPointLocation)
-        context.ContextOuterClass.Constraint_EndPointLocationOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Constraint_EndPointPriority)
+        context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_EndPointPriority_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Constraint_EndPointPriority_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Constraint_EndPointLocation.class, context.ContextOuterClass.Constraint_EndPointLocation.Builder.class);
+                context.ContextOuterClass.Constraint_EndPointPriority.class, context.ContextOuterClass.Constraint_EndPointPriority.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Constraint_EndPointLocation.newBuilder()
+      // Construct using context.ContextOuterClass.Constraint_EndPointPriority.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -53373,29 +55156,25 @@ public final class ContextOuterClass {
           endpointId_ = null;
           endpointIdBuilder_ = null;
         }
-        if (locationBuilder_ == null) {
-          location_ = null;
-        } else {
-          location_ = null;
-          locationBuilder_ = null;
-        }
+        priority_ = 0;
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_EndPointPriority_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_EndPointLocation getDefaultInstanceForType() {
-        return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
+      public context.ContextOuterClass.Constraint_EndPointPriority getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_EndPointLocation build() {
-        context.ContextOuterClass.Constraint_EndPointLocation result = buildPartial();
+      public context.ContextOuterClass.Constraint_EndPointPriority build() {
+        context.ContextOuterClass.Constraint_EndPointPriority result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -53403,18 +55182,14 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_EndPointLocation buildPartial() {
-        context.ContextOuterClass.Constraint_EndPointLocation result = new context.ContextOuterClass.Constraint_EndPointLocation(this);
+      public context.ContextOuterClass.Constraint_EndPointPriority buildPartial() {
+        context.ContextOuterClass.Constraint_EndPointPriority result = new context.ContextOuterClass.Constraint_EndPointPriority(this);
         if (endpointIdBuilder_ == null) {
           result.endpointId_ = endpointId_;
         } else {
           result.endpointId_ = endpointIdBuilder_.build();
         }
-        if (locationBuilder_ == null) {
-          result.location_ = location_;
-        } else {
-          result.location_ = locationBuilder_.build();
-        }
+        result.priority_ = priority_;
         onBuilt();
         return result;
       }
@@ -53453,21 +55228,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Constraint_EndPointLocation) {
-          return mergeFrom((context.ContextOuterClass.Constraint_EndPointLocation)other);
+        if (other instanceof context.ContextOuterClass.Constraint_EndPointPriority) {
+          return mergeFrom((context.ContextOuterClass.Constraint_EndPointPriority)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Constraint_EndPointLocation other) {
-        if (other == context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance()) return this;
+      public Builder mergeFrom(context.ContextOuterClass.Constraint_EndPointPriority other) {
+        if (other == context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance()) return this;
         if (other.hasEndpointId()) {
           mergeEndpointId(other.getEndpointId());
         }
-        if (other.hasLocation()) {
-          mergeLocation(other.getLocation());
+        if (other.getPriority() != 0) {
+          setPriority(other.getPriority());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -53484,11 +55259,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Constraint_EndPointLocation parsedMessage = null;
+        context.ContextOuterClass.Constraint_EndPointPriority parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Constraint_EndPointLocation) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Constraint_EndPointPriority) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -53617,123 +55392,35 @@ public final class ContextOuterClass {
         return endpointIdBuilder_;
       }
 
-      private context.ContextOuterClass.Location location_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> locationBuilder_;
-      /**
-       * <code>.context.Location location = 2;</code>
-       * @return Whether the location field is set.
-       */
-      public boolean hasLocation() {
-        return locationBuilder_ != null || location_ != null;
-      }
-      /**
-       * <code>.context.Location location = 2;</code>
-       * @return The location.
-       */
-      public context.ContextOuterClass.Location getLocation() {
-        if (locationBuilder_ == null) {
-          return location_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : location_;
-        } else {
-          return locationBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.Location location = 2;</code>
-       */
-      public Builder setLocation(context.ContextOuterClass.Location value) {
-        if (locationBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          location_ = value;
-          onChanged();
-        } else {
-          locationBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.Location location = 2;</code>
-       */
-      public Builder setLocation(
-          context.ContextOuterClass.Location.Builder builderForValue) {
-        if (locationBuilder_ == null) {
-          location_ = builderForValue.build();
-          onChanged();
-        } else {
-          locationBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.Location location = 2;</code>
-       */
-      public Builder mergeLocation(context.ContextOuterClass.Location value) {
-        if (locationBuilder_ == null) {
-          if (location_ != null) {
-            location_ =
-              context.ContextOuterClass.Location.newBuilder(location_).mergeFrom(value).buildPartial();
-          } else {
-            location_ = value;
-          }
-          onChanged();
-        } else {
-          locationBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
+      private int priority_ ;
       /**
-       * <code>.context.Location location = 2;</code>
+       * <code>uint32 priority = 2;</code>
+       * @return The priority.
        */
-      public Builder clearLocation() {
-        if (locationBuilder_ == null) {
-          location_ = null;
-          onChanged();
-        } else {
-          location_ = null;
-          locationBuilder_ = null;
-        }
-
-        return this;
+      @java.lang.Override
+      public int getPriority() {
+        return priority_;
       }
       /**
-       * <code>.context.Location location = 2;</code>
+       * <code>uint32 priority = 2;</code>
+       * @param value The priority to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.Location.Builder getLocationBuilder() {
+      public Builder setPriority(int value) {
         
+        priority_ = value;
         onChanged();
-        return getLocationFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.Location location = 2;</code>
-       */
-      public context.ContextOuterClass.LocationOrBuilder getLocationOrBuilder() {
-        if (locationBuilder_ != null) {
-          return locationBuilder_.getMessageOrBuilder();
-        } else {
-          return location_ == null ?
-              context.ContextOuterClass.Location.getDefaultInstance() : location_;
-        }
+        return this;
       }
-      /**
-       * <code>.context.Location location = 2;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> 
-          getLocationFieldBuilder() {
-        if (locationBuilder_ == null) {
-          locationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder>(
-                  getLocation(),
-                  getParentForChildren(),
-                  isClean());
-          location_ = null;
-        }
-        return locationBuilder_;
+      /**
+       * <code>uint32 priority = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearPriority() {
+        
+        priority_ = 0;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -53748,41 +55435,41 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Constraint_EndPointLocation)
+      // @@protoc_insertion_point(builder_scope:context.Constraint_EndPointPriority)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Constraint_EndPointLocation)
-    private static final context.ContextOuterClass.Constraint_EndPointLocation DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Constraint_EndPointPriority)
+    private static final context.ContextOuterClass.Constraint_EndPointPriority DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_EndPointLocation();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_EndPointPriority();
     }
 
-    public static context.ContextOuterClass.Constraint_EndPointLocation getDefaultInstance() {
+    public static context.ContextOuterClass.Constraint_EndPointPriority getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Constraint_EndPointLocation>
-        PARSER = new com.google.protobuf.AbstractParser<Constraint_EndPointLocation>() {
+    private static final com.google.protobuf.Parser<Constraint_EndPointPriority>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_EndPointPriority>() {
       @java.lang.Override
-      public Constraint_EndPointLocation parsePartialFrom(
+      public Constraint_EndPointPriority parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Constraint_EndPointLocation(input, extensionRegistry);
+        return new Constraint_EndPointPriority(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Constraint_EndPointLocation> parser() {
+    public static com.google.protobuf.Parser<Constraint_EndPointPriority> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Constraint_EndPointLocation> getParserForType() {
+    public com.google.protobuf.Parser<Constraint_EndPointPriority> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Constraint_EndPointLocation getDefaultInstanceForType() {
+    public context.ContextOuterClass.Constraint_EndPointPriority getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
@@ -55332,15 +57019,33 @@ public final class ContextOuterClass {
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
-     * @return The enum numeric value on the wire for isolationLevel.
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return A list containing the isolationLevel.
+     */
+    java.util.List<context.ContextOuterClass.IsolationLevelEnum> getIsolationLevelList();
+    /**
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return The count of isolationLevel.
+     */
+    int getIsolationLevelCount();
+    /**
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @param index The index of the element to return.
+     * @return The isolationLevel at the given index.
+     */
+    context.ContextOuterClass.IsolationLevelEnum getIsolationLevel(int index);
+    /**
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return A list containing the enum numeric values on the wire for isolationLevel.
      */
-    int getIsolationLevelValue();
+    java.util.List<java.lang.Integer>
+    getIsolationLevelValueList();
     /**
-     * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
-     * @return The isolationLevel.
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of isolationLevel at the given index.
      */
-    context.ContextOuterClass.IsolationLevelEnum getIsolationLevel();
+    int getIsolationLevelValue(int index);
   }
   /**
    * Protobuf type {@code context.Constraint_SLA_Isolation_level}
@@ -55355,7 +57060,7 @@ public final class ContextOuterClass {
       super(builder);
     }
     private Constraint_SLA_Isolation_level() {
-      isolationLevel_ = 0;
+      isolationLevel_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
@@ -55378,6 +57083,7 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -55390,8 +57096,25 @@ public final class ContextOuterClass {
               break;
             case 8: {
               int rawValue = input.readEnum();
-
-              isolationLevel_ = rawValue;
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                isolationLevel_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              isolationLevel_.add(rawValue);
+              break;
+            }
+            case 10: {
+              int length = input.readRawVarint32();
+              int oldLimit = input.pushLimit(length);
+              while(input.getBytesUntilLimit() > 0) {
+                int rawValue = input.readEnum();
+                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                  isolationLevel_ = new java.util.ArrayList<java.lang.Integer>();
+                  mutable_bitField0_ |= 0x00000001;
+                }
+                isolationLevel_.add(rawValue);
+              }
+              input.popLimit(oldLimit);
               break;
             }
             default: {
@@ -55409,6 +57132,9 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          isolationLevel_ = java.util.Collections.unmodifiableList(isolationLevel_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
@@ -55427,23 +57153,62 @@ public final class ContextOuterClass {
     }
 
     public static final int ISOLATION_LEVEL_FIELD_NUMBER = 1;
-    private int isolationLevel_;
+    private java.util.List<java.lang.Integer> isolationLevel_;
+    private static final com.google.protobuf.Internal.ListAdapter.Converter<
+        java.lang.Integer, context.ContextOuterClass.IsolationLevelEnum> isolationLevel_converter_ =
+            new com.google.protobuf.Internal.ListAdapter.Converter<
+                java.lang.Integer, context.ContextOuterClass.IsolationLevelEnum>() {
+              public context.ContextOuterClass.IsolationLevelEnum convert(java.lang.Integer from) {
+                @SuppressWarnings("deprecation")
+                context.ContextOuterClass.IsolationLevelEnum result = context.ContextOuterClass.IsolationLevelEnum.valueOf(from);
+                return result == null ? context.ContextOuterClass.IsolationLevelEnum.UNRECOGNIZED : result;
+              }
+            };
+    /**
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return A list containing the isolationLevel.
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.IsolationLevelEnum> getIsolationLevelList() {
+      return new com.google.protobuf.Internal.ListAdapter<
+          java.lang.Integer, context.ContextOuterClass.IsolationLevelEnum>(isolationLevel_, isolationLevel_converter_);
+    }
+    /**
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return The count of isolationLevel.
+     */
+    @java.lang.Override
+    public int getIsolationLevelCount() {
+      return isolationLevel_.size();
+    }
+    /**
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @param index The index of the element to return.
+     * @return The isolationLevel at the given index.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.IsolationLevelEnum getIsolationLevel(int index) {
+      return isolationLevel_converter_.convert(isolationLevel_.get(index));
+    }
     /**
-     * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
-     * @return The enum numeric value on the wire for isolationLevel.
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return A list containing the enum numeric values on the wire for isolationLevel.
      */
-    @java.lang.Override public int getIsolationLevelValue() {
+    @java.lang.Override
+    public java.util.List<java.lang.Integer>
+    getIsolationLevelValueList() {
       return isolationLevel_;
     }
     /**
-     * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
-     * @return The isolationLevel.
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of isolationLevel at the given index.
      */
-    @java.lang.Override public context.ContextOuterClass.IsolationLevelEnum getIsolationLevel() {
-      @SuppressWarnings("deprecation")
-      context.ContextOuterClass.IsolationLevelEnum result = context.ContextOuterClass.IsolationLevelEnum.valueOf(isolationLevel_);
-      return result == null ? context.ContextOuterClass.IsolationLevelEnum.UNRECOGNIZED : result;
+    @java.lang.Override
+    public int getIsolationLevelValue(int index) {
+      return isolationLevel_.get(index);
     }
+    private int isolationLevelMemoizedSerializedSize;
 
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
@@ -55459,8 +57224,13 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (isolationLevel_ != context.ContextOuterClass.IsolationLevelEnum.NO_ISOLATION.getNumber()) {
-        output.writeEnum(1, isolationLevel_);
+      getSerializedSize();
+      if (getIsolationLevelList().size() > 0) {
+        output.writeUInt32NoTag(10);
+        output.writeUInt32NoTag(isolationLevelMemoizedSerializedSize);
+      }
+      for (int i = 0; i < isolationLevel_.size(); i++) {
+        output.writeEnumNoTag(isolationLevel_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -55471,9 +57241,17 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (isolationLevel_ != context.ContextOuterClass.IsolationLevelEnum.NO_ISOLATION.getNumber()) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(1, isolationLevel_);
+      {
+        int dataSize = 0;
+        for (int i = 0; i < isolationLevel_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeEnumSizeNoTag(isolationLevel_.get(i));
+        }
+        size += dataSize;
+        if (!getIsolationLevelList().isEmpty()) {  size += 1;
+          size += com.google.protobuf.CodedOutputStream
+            .computeUInt32SizeNoTag(dataSize);
+        }isolationLevelMemoizedSerializedSize = dataSize;
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -55490,7 +57268,7 @@ public final class ContextOuterClass {
       }
       context.ContextOuterClass.Constraint_SLA_Isolation_level other = (context.ContextOuterClass.Constraint_SLA_Isolation_level) obj;
 
-      if (isolationLevel_ != other.isolationLevel_) return false;
+      if (!isolationLevel_.equals(other.isolationLevel_)) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -55502,8 +57280,10 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + ISOLATION_LEVEL_FIELD_NUMBER;
-      hash = (53 * hash) + isolationLevel_;
+      if (getIsolationLevelCount() > 0) {
+        hash = (37 * hash) + ISOLATION_LEVEL_FIELD_NUMBER;
+        hash = (53 * hash) + isolationLevel_.hashCode();
+      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -55637,8 +57417,8 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        isolationLevel_ = 0;
-
+        isolationLevel_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
         return this;
       }
 
@@ -55665,6 +57445,11 @@ public final class ContextOuterClass {
       @java.lang.Override
       public context.ContextOuterClass.Constraint_SLA_Isolation_level buildPartial() {
         context.ContextOuterClass.Constraint_SLA_Isolation_level result = new context.ContextOuterClass.Constraint_SLA_Isolation_level(this);
+        int from_bitField0_ = bitField0_;
+        if (((bitField0_ & 0x00000001) != 0)) {
+          isolationLevel_ = java.util.Collections.unmodifiableList(isolationLevel_);
+          bitField0_ = (bitField0_ & ~0x00000001);
+        }
         result.isolationLevel_ = isolationLevel_;
         onBuilt();
         return result;
@@ -55714,8 +57499,15 @@ public final class ContextOuterClass {
 
       public Builder mergeFrom(context.ContextOuterClass.Constraint_SLA_Isolation_level other) {
         if (other == context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance()) return this;
-        if (other.isolationLevel_ != 0) {
-          setIsolationLevelValue(other.getIsolationLevelValue());
+        if (!other.isolationLevel_.isEmpty()) {
+          if (isolationLevel_.isEmpty()) {
+            isolationLevel_ = other.isolationLevel_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureIsolationLevelIsMutable();
+            isolationLevel_.addAll(other.isolationLevel_);
+          }
+          onChanged();
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -55745,57 +57537,144 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int bitField0_;
 
-      private int isolationLevel_ = 0;
+      private java.util.List<java.lang.Integer> isolationLevel_ =
+        java.util.Collections.emptyList();
+      private void ensureIsolationLevelIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          isolationLevel_ = new java.util.ArrayList<java.lang.Integer>(isolationLevel_);
+          bitField0_ |= 0x00000001;
+        }
+      }
       /**
-       * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
-       * @return The enum numeric value on the wire for isolationLevel.
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @return A list containing the isolationLevel.
        */
-      @java.lang.Override public int getIsolationLevelValue() {
-        return isolationLevel_;
+      public java.util.List<context.ContextOuterClass.IsolationLevelEnum> getIsolationLevelList() {
+        return new com.google.protobuf.Internal.ListAdapter<
+            java.lang.Integer, context.ContextOuterClass.IsolationLevelEnum>(isolationLevel_, isolationLevel_converter_);
       }
       /**
-       * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
-       * @param value The enum numeric value on the wire for isolationLevel to set.
-       * @return This builder for chaining.
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @return The count of isolationLevel.
        */
-      public Builder setIsolationLevelValue(int value) {
-        
-        isolationLevel_ = value;
-        onChanged();
-        return this;
+      public int getIsolationLevelCount() {
+        return isolationLevel_.size();
       }
       /**
-       * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
-       * @return The isolationLevel.
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param index The index of the element to return.
+       * @return The isolationLevel at the given index.
        */
-      @java.lang.Override
-      public context.ContextOuterClass.IsolationLevelEnum getIsolationLevel() {
-        @SuppressWarnings("deprecation")
-        context.ContextOuterClass.IsolationLevelEnum result = context.ContextOuterClass.IsolationLevelEnum.valueOf(isolationLevel_);
-        return result == null ? context.ContextOuterClass.IsolationLevelEnum.UNRECOGNIZED : result;
+      public context.ContextOuterClass.IsolationLevelEnum getIsolationLevel(int index) {
+        return isolationLevel_converter_.convert(isolationLevel_.get(index));
       }
       /**
-       * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param index The index to set the value at.
        * @param value The isolationLevel to set.
        * @return This builder for chaining.
        */
-      public Builder setIsolationLevel(context.ContextOuterClass.IsolationLevelEnum value) {
+      public Builder setIsolationLevel(
+          int index, context.ContextOuterClass.IsolationLevelEnum value) {
         if (value == null) {
           throw new NullPointerException();
         }
-        
-        isolationLevel_ = value.getNumber();
+        ensureIsolationLevelIsMutable();
+        isolationLevel_.set(index, value.getNumber());
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param value The isolationLevel to add.
+       * @return This builder for chaining.
+       */
+      public Builder addIsolationLevel(context.ContextOuterClass.IsolationLevelEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureIsolationLevelIsMutable();
+        isolationLevel_.add(value.getNumber());
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param values The isolationLevel to add.
+       * @return This builder for chaining.
+       */
+      public Builder addAllIsolationLevel(
+          java.lang.Iterable<? extends context.ContextOuterClass.IsolationLevelEnum> values) {
+        ensureIsolationLevelIsMutable();
+        for (context.ContextOuterClass.IsolationLevelEnum value : values) {
+          isolationLevel_.add(value.getNumber());
+        }
         onChanged();
         return this;
       }
       /**
-       * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
        * @return This builder for chaining.
        */
       public Builder clearIsolationLevel() {
-        
-        isolationLevel_ = 0;
+        isolationLevel_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @return A list containing the enum numeric values on the wire for isolationLevel.
+       */
+      public java.util.List<java.lang.Integer>
+      getIsolationLevelValueList() {
+        return java.util.Collections.unmodifiableList(isolationLevel_);
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of isolationLevel at the given index.
+       */
+      public int getIsolationLevelValue(int index) {
+        return isolationLevel_.get(index);
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of isolationLevel at the given index.
+       * @return This builder for chaining.
+       */
+      public Builder setIsolationLevelValue(
+          int index, int value) {
+        ensureIsolationLevelIsMutable();
+        isolationLevel_.set(index, value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param value The enum numeric value on the wire for isolationLevel to add.
+       * @return This builder for chaining.
+       */
+      public Builder addIsolationLevelValue(int value) {
+        ensureIsolationLevelIsMutable();
+        isolationLevel_.add(value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param values The enum numeric values on the wire for isolationLevel to add.
+       * @return This builder for chaining.
+       */
+      public Builder addAllIsolationLevelValue(
+          java.lang.Iterable<java.lang.Integer> values) {
+        ensureIsolationLevelIsMutable();
+        for (int value : values) {
+          isolationLevel_.add(value);
+        }
         onChanged();
         return this;
       }
@@ -55902,62 +57781,77 @@ public final class ContextOuterClass {
     context.ContextOuterClass.Constraint_EndPointLocationOrBuilder getEndpointLocationOrBuilder();
 
     /**
-     * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+     * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+     * @return Whether the endpointPriority field is set.
+     */
+    boolean hasEndpointPriority();
+    /**
+     * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+     * @return The endpointPriority.
+     */
+    context.ContextOuterClass.Constraint_EndPointPriority getEndpointPriority();
+    /**
+     * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+     */
+    context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder getEndpointPriorityOrBuilder();
+
+    /**
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
      * @return Whether the slaCapacity field is set.
      */
     boolean hasSlaCapacity();
     /**
-     * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
      * @return The slaCapacity.
      */
     context.ContextOuterClass.Constraint_SLA_Capacity getSlaCapacity();
     /**
-     * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
      */
     context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder getSlaCapacityOrBuilder();
 
     /**
-     * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+     * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
      * @return Whether the slaLatency field is set.
      */
     boolean hasSlaLatency();
     /**
-     * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+     * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
      * @return The slaLatency.
      */
     context.ContextOuterClass.Constraint_SLA_Latency getSlaLatency();
     /**
-     * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+     * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
      */
     context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder getSlaLatencyOrBuilder();
 
     /**
-     * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+     * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
      * @return Whether the slaAvailability field is set.
      */
     boolean hasSlaAvailability();
     /**
-     * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+     * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
      * @return The slaAvailability.
      */
     context.ContextOuterClass.Constraint_SLA_Availability getSlaAvailability();
     /**
-     * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+     * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
      */
     context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder getSlaAvailabilityOrBuilder();
 
     /**
-     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
      * @return Whether the slaIsolation field is set.
      */
     boolean hasSlaIsolation();
     /**
-     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
      * @return The slaIsolation.
      */
     context.ContextOuterClass.Constraint_SLA_Isolation_level getSlaIsolation();
     /**
-     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
      */
     context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder getSlaIsolationOrBuilder();
 
@@ -56051,8 +57945,22 @@ public final class ContextOuterClass {
               break;
             }
             case 34: {
-              context.ContextOuterClass.Constraint_SLA_Capacity.Builder subBuilder = null;
+              context.ContextOuterClass.Constraint_EndPointPriority.Builder subBuilder = null;
               if (constraintCase_ == 4) {
+                subBuilder = ((context.ContextOuterClass.Constraint_EndPointPriority) constraint_).toBuilder();
+              }
+              constraint_ =
+                  input.readMessage(context.ContextOuterClass.Constraint_EndPointPriority.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom((context.ContextOuterClass.Constraint_EndPointPriority) constraint_);
+                constraint_ = subBuilder.buildPartial();
+              }
+              constraintCase_ = 4;
+              break;
+            }
+            case 42: {
+              context.ContextOuterClass.Constraint_SLA_Capacity.Builder subBuilder = null;
+              if (constraintCase_ == 5) {
                 subBuilder = ((context.ContextOuterClass.Constraint_SLA_Capacity) constraint_).toBuilder();
               }
               constraint_ =
@@ -56061,12 +57969,12 @@ public final class ContextOuterClass {
                 subBuilder.mergeFrom((context.ContextOuterClass.Constraint_SLA_Capacity) constraint_);
                 constraint_ = subBuilder.buildPartial();
               }
-              constraintCase_ = 4;
+              constraintCase_ = 5;
               break;
             }
-            case 42: {
+            case 50: {
               context.ContextOuterClass.Constraint_SLA_Latency.Builder subBuilder = null;
-              if (constraintCase_ == 5) {
+              if (constraintCase_ == 6) {
                 subBuilder = ((context.ContextOuterClass.Constraint_SLA_Latency) constraint_).toBuilder();
               }
               constraint_ =
@@ -56075,12 +57983,12 @@ public final class ContextOuterClass {
                 subBuilder.mergeFrom((context.ContextOuterClass.Constraint_SLA_Latency) constraint_);
                 constraint_ = subBuilder.buildPartial();
               }
-              constraintCase_ = 5;
+              constraintCase_ = 6;
               break;
             }
-            case 50: {
+            case 58: {
               context.ContextOuterClass.Constraint_SLA_Availability.Builder subBuilder = null;
-              if (constraintCase_ == 6) {
+              if (constraintCase_ == 7) {
                 subBuilder = ((context.ContextOuterClass.Constraint_SLA_Availability) constraint_).toBuilder();
               }
               constraint_ =
@@ -56089,12 +57997,12 @@ public final class ContextOuterClass {
                 subBuilder.mergeFrom((context.ContextOuterClass.Constraint_SLA_Availability) constraint_);
                 constraint_ = subBuilder.buildPartial();
               }
-              constraintCase_ = 6;
+              constraintCase_ = 7;
               break;
             }
-            case 58: {
+            case 66: {
               context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder subBuilder = null;
-              if (constraintCase_ == 7) {
+              if (constraintCase_ == 8) {
                 subBuilder = ((context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_).toBuilder();
               }
               constraint_ =
@@ -56103,7 +58011,7 @@ public final class ContextOuterClass {
                 subBuilder.mergeFrom((context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_);
                 constraint_ = subBuilder.buildPartial();
               }
-              constraintCase_ = 7;
+              constraintCase_ = 8;
               break;
             }
             default: {
@@ -56146,10 +58054,11 @@ public final class ContextOuterClass {
       CUSTOM(1),
       SCHEDULE(2),
       ENDPOINT_LOCATION(3),
-      SLA_CAPACITY(4),
-      SLA_LATENCY(5),
-      SLA_AVAILABILITY(6),
-      SLA_ISOLATION(7),
+      ENDPOINT_PRIORITY(4),
+      SLA_CAPACITY(5),
+      SLA_LATENCY(6),
+      SLA_AVAILABILITY(7),
+      SLA_ISOLATION(8),
       CONSTRAINT_NOT_SET(0);
       private final int value;
       private ConstraintCase(int value) {
@@ -56170,10 +58079,11 @@ public final class ContextOuterClass {
           case 1: return CUSTOM;
           case 2: return SCHEDULE;
           case 3: return ENDPOINT_LOCATION;
-          case 4: return SLA_CAPACITY;
-          case 5: return SLA_LATENCY;
-          case 6: return SLA_AVAILABILITY;
-          case 7: return SLA_ISOLATION;
+          case 4: return ENDPOINT_PRIORITY;
+          case 5: return SLA_CAPACITY;
+          case 6: return SLA_LATENCY;
+          case 7: return SLA_AVAILABILITY;
+          case 8: return SLA_ISOLATION;
           case 0: return CONSTRAINT_NOT_SET;
           default: return null;
         }
@@ -56282,125 +58192,156 @@ public final class ContextOuterClass {
       return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
     }
 
-    public static final int SLA_CAPACITY_FIELD_NUMBER = 4;
+    public static final int ENDPOINT_PRIORITY_FIELD_NUMBER = 4;
+    /**
+     * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+     * @return Whether the endpointPriority field is set.
+     */
+    @java.lang.Override
+    public boolean hasEndpointPriority() {
+      return constraintCase_ == 4;
+    }
+    /**
+     * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+     * @return The endpointPriority.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_EndPointPriority getEndpointPriority() {
+      if (constraintCase_ == 4) {
+         return (context.ContextOuterClass.Constraint_EndPointPriority) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+    }
+    /**
+     * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder getEndpointPriorityOrBuilder() {
+      if (constraintCase_ == 4) {
+         return (context.ContextOuterClass.Constraint_EndPointPriority) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+    }
+
+    public static final int SLA_CAPACITY_FIELD_NUMBER = 5;
     /**
-     * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
      * @return Whether the slaCapacity field is set.
      */
     @java.lang.Override
     public boolean hasSlaCapacity() {
-      return constraintCase_ == 4;
+      return constraintCase_ == 5;
     }
     /**
-     * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
      * @return The slaCapacity.
      */
     @java.lang.Override
     public context.ContextOuterClass.Constraint_SLA_Capacity getSlaCapacity() {
-      if (constraintCase_ == 4) {
+      if (constraintCase_ == 5) {
          return (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_;
       }
       return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
     }
     /**
-     * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder getSlaCapacityOrBuilder() {
-      if (constraintCase_ == 4) {
+      if (constraintCase_ == 5) {
          return (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_;
       }
       return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
     }
 
-    public static final int SLA_LATENCY_FIELD_NUMBER = 5;
+    public static final int SLA_LATENCY_FIELD_NUMBER = 6;
     /**
-     * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+     * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
      * @return Whether the slaLatency field is set.
      */
     @java.lang.Override
     public boolean hasSlaLatency() {
-      return constraintCase_ == 5;
+      return constraintCase_ == 6;
     }
     /**
-     * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+     * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
      * @return The slaLatency.
      */
     @java.lang.Override
     public context.ContextOuterClass.Constraint_SLA_Latency getSlaLatency() {
-      if (constraintCase_ == 5) {
+      if (constraintCase_ == 6) {
          return (context.ContextOuterClass.Constraint_SLA_Latency) constraint_;
       }
       return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
     }
     /**
-     * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+     * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder getSlaLatencyOrBuilder() {
-      if (constraintCase_ == 5) {
+      if (constraintCase_ == 6) {
          return (context.ContextOuterClass.Constraint_SLA_Latency) constraint_;
       }
       return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
     }
 
-    public static final int SLA_AVAILABILITY_FIELD_NUMBER = 6;
+    public static final int SLA_AVAILABILITY_FIELD_NUMBER = 7;
     /**
-     * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+     * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
      * @return Whether the slaAvailability field is set.
      */
     @java.lang.Override
     public boolean hasSlaAvailability() {
-      return constraintCase_ == 6;
+      return constraintCase_ == 7;
     }
     /**
-     * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+     * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
      * @return The slaAvailability.
      */
     @java.lang.Override
     public context.ContextOuterClass.Constraint_SLA_Availability getSlaAvailability() {
-      if (constraintCase_ == 6) {
+      if (constraintCase_ == 7) {
          return (context.ContextOuterClass.Constraint_SLA_Availability) constraint_;
       }
       return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
     }
     /**
-     * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+     * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder getSlaAvailabilityOrBuilder() {
-      if (constraintCase_ == 6) {
+      if (constraintCase_ == 7) {
          return (context.ContextOuterClass.Constraint_SLA_Availability) constraint_;
       }
       return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
     }
 
-    public static final int SLA_ISOLATION_FIELD_NUMBER = 7;
+    public static final int SLA_ISOLATION_FIELD_NUMBER = 8;
     /**
-     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
      * @return Whether the slaIsolation field is set.
      */
     @java.lang.Override
     public boolean hasSlaIsolation() {
-      return constraintCase_ == 7;
+      return constraintCase_ == 8;
     }
     /**
-     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
      * @return The slaIsolation.
      */
     @java.lang.Override
     public context.ContextOuterClass.Constraint_SLA_Isolation_level getSlaIsolation() {
-      if (constraintCase_ == 7) {
+      if (constraintCase_ == 8) {
          return (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_;
       }
       return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
     }
     /**
-     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder getSlaIsolationOrBuilder() {
-      if (constraintCase_ == 7) {
+      if (constraintCase_ == 8) {
          return (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_;
       }
       return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
@@ -56430,16 +58371,19 @@ public final class ContextOuterClass {
         output.writeMessage(3, (context.ContextOuterClass.Constraint_EndPointLocation) constraint_);
       }
       if (constraintCase_ == 4) {
-        output.writeMessage(4, (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_);
+        output.writeMessage(4, (context.ContextOuterClass.Constraint_EndPointPriority) constraint_);
       }
       if (constraintCase_ == 5) {
-        output.writeMessage(5, (context.ContextOuterClass.Constraint_SLA_Latency) constraint_);
+        output.writeMessage(5, (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_);
       }
       if (constraintCase_ == 6) {
-        output.writeMessage(6, (context.ContextOuterClass.Constraint_SLA_Availability) constraint_);
+        output.writeMessage(6, (context.ContextOuterClass.Constraint_SLA_Latency) constraint_);
       }
       if (constraintCase_ == 7) {
-        output.writeMessage(7, (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_);
+        output.writeMessage(7, (context.ContextOuterClass.Constraint_SLA_Availability) constraint_);
+      }
+      if (constraintCase_ == 8) {
+        output.writeMessage(8, (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_);
       }
       unknownFields.writeTo(output);
     }
@@ -56464,19 +58408,23 @@ public final class ContextOuterClass {
       }
       if (constraintCase_ == 4) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_);
+          .computeMessageSize(4, (context.ContextOuterClass.Constraint_EndPointPriority) constraint_);
       }
       if (constraintCase_ == 5) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, (context.ContextOuterClass.Constraint_SLA_Latency) constraint_);
+          .computeMessageSize(5, (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_);
       }
       if (constraintCase_ == 6) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, (context.ContextOuterClass.Constraint_SLA_Availability) constraint_);
+          .computeMessageSize(6, (context.ContextOuterClass.Constraint_SLA_Latency) constraint_);
       }
       if (constraintCase_ == 7) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(7, (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_);
+          .computeMessageSize(7, (context.ContextOuterClass.Constraint_SLA_Availability) constraint_);
+      }
+      if (constraintCase_ == 8) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(8, (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -56508,18 +58456,22 @@ public final class ContextOuterClass {
               .equals(other.getEndpointLocation())) return false;
           break;
         case 4:
+          if (!getEndpointPriority()
+              .equals(other.getEndpointPriority())) return false;
+          break;
+        case 5:
           if (!getSlaCapacity()
               .equals(other.getSlaCapacity())) return false;
           break;
-        case 5:
+        case 6:
           if (!getSlaLatency()
               .equals(other.getSlaLatency())) return false;
           break;
-        case 6:
+        case 7:
           if (!getSlaAvailability()
               .equals(other.getSlaAvailability())) return false;
           break;
-        case 7:
+        case 8:
           if (!getSlaIsolation()
               .equals(other.getSlaIsolation())) return false;
           break;
@@ -56551,18 +58503,22 @@ public final class ContextOuterClass {
           hash = (53 * hash) + getEndpointLocation().hashCode();
           break;
         case 4:
+          hash = (37 * hash) + ENDPOINT_PRIORITY_FIELD_NUMBER;
+          hash = (53 * hash) + getEndpointPriority().hashCode();
+          break;
+        case 5:
           hash = (37 * hash) + SLA_CAPACITY_FIELD_NUMBER;
           hash = (53 * hash) + getSlaCapacity().hashCode();
           break;
-        case 5:
+        case 6:
           hash = (37 * hash) + SLA_LATENCY_FIELD_NUMBER;
           hash = (53 * hash) + getSlaLatency().hashCode();
           break;
-        case 6:
+        case 7:
           hash = (37 * hash) + SLA_AVAILABILITY_FIELD_NUMBER;
           hash = (53 * hash) + getSlaAvailability().hashCode();
           break;
-        case 7:
+        case 8:
           hash = (37 * hash) + SLA_ISOLATION_FIELD_NUMBER;
           hash = (53 * hash) + getSlaIsolation().hashCode();
           break;
@@ -56752,27 +58708,34 @@ public final class ContextOuterClass {
           }
         }
         if (constraintCase_ == 4) {
+          if (endpointPriorityBuilder_ == null) {
+            result.constraint_ = constraint_;
+          } else {
+            result.constraint_ = endpointPriorityBuilder_.build();
+          }
+        }
+        if (constraintCase_ == 5) {
           if (slaCapacityBuilder_ == null) {
             result.constraint_ = constraint_;
           } else {
             result.constraint_ = slaCapacityBuilder_.build();
           }
         }
-        if (constraintCase_ == 5) {
+        if (constraintCase_ == 6) {
           if (slaLatencyBuilder_ == null) {
             result.constraint_ = constraint_;
           } else {
             result.constraint_ = slaLatencyBuilder_.build();
           }
         }
-        if (constraintCase_ == 6) {
+        if (constraintCase_ == 7) {
           if (slaAvailabilityBuilder_ == null) {
             result.constraint_ = constraint_;
           } else {
             result.constraint_ = slaAvailabilityBuilder_.build();
           }
         }
-        if (constraintCase_ == 7) {
+        if (constraintCase_ == 8) {
           if (slaIsolationBuilder_ == null) {
             result.constraint_ = constraint_;
           } else {
@@ -56841,6 +58804,10 @@ public final class ContextOuterClass {
             mergeEndpointLocation(other.getEndpointLocation());
             break;
           }
+          case ENDPOINT_PRIORITY: {
+            mergeEndpointPriority(other.getEndpointPriority());
+            break;
+          }
           case SLA_CAPACITY: {
             mergeSlaCapacity(other.getSlaCapacity());
             break;
@@ -57328,36 +59295,177 @@ public final class ContextOuterClass {
         return endpointLocationBuilder_;
       }
 
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_EndPointPriority, context.ContextOuterClass.Constraint_EndPointPriority.Builder, context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder> endpointPriorityBuilder_;
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       * @return Whether the endpointPriority field is set.
+       */
+      @java.lang.Override
+      public boolean hasEndpointPriority() {
+        return constraintCase_ == 4;
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       * @return The endpointPriority.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_EndPointPriority getEndpointPriority() {
+        if (endpointPriorityBuilder_ == null) {
+          if (constraintCase_ == 4) {
+            return (context.ContextOuterClass.Constraint_EndPointPriority) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+        } else {
+          if (constraintCase_ == 4) {
+            return endpointPriorityBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       */
+      public Builder setEndpointPriority(context.ContextOuterClass.Constraint_EndPointPriority value) {
+        if (endpointPriorityBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          constraint_ = value;
+          onChanged();
+        } else {
+          endpointPriorityBuilder_.setMessage(value);
+        }
+        constraintCase_ = 4;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       */
+      public Builder setEndpointPriority(
+          context.ContextOuterClass.Constraint_EndPointPriority.Builder builderForValue) {
+        if (endpointPriorityBuilder_ == null) {
+          constraint_ = builderForValue.build();
+          onChanged();
+        } else {
+          endpointPriorityBuilder_.setMessage(builderForValue.build());
+        }
+        constraintCase_ = 4;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       */
+      public Builder mergeEndpointPriority(context.ContextOuterClass.Constraint_EndPointPriority value) {
+        if (endpointPriorityBuilder_ == null) {
+          if (constraintCase_ == 4 &&
+              constraint_ != context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance()) {
+            constraint_ = context.ContextOuterClass.Constraint_EndPointPriority.newBuilder((context.ContextOuterClass.Constraint_EndPointPriority) constraint_)
+                .mergeFrom(value).buildPartial();
+          } else {
+            constraint_ = value;
+          }
+          onChanged();
+        } else {
+          if (constraintCase_ == 4) {
+            endpointPriorityBuilder_.mergeFrom(value);
+          }
+          endpointPriorityBuilder_.setMessage(value);
+        }
+        constraintCase_ = 4;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       */
+      public Builder clearEndpointPriority() {
+        if (endpointPriorityBuilder_ == null) {
+          if (constraintCase_ == 4) {
+            constraintCase_ = 0;
+            constraint_ = null;
+            onChanged();
+          }
+        } else {
+          if (constraintCase_ == 4) {
+            constraintCase_ = 0;
+            constraint_ = null;
+          }
+          endpointPriorityBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       */
+      public context.ContextOuterClass.Constraint_EndPointPriority.Builder getEndpointPriorityBuilder() {
+        return getEndpointPriorityFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder getEndpointPriorityOrBuilder() {
+        if ((constraintCase_ == 4) && (endpointPriorityBuilder_ != null)) {
+          return endpointPriorityBuilder_.getMessageOrBuilder();
+        } else {
+          if (constraintCase_ == 4) {
+            return (context.ContextOuterClass.Constraint_EndPointPriority) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_EndPointPriority, context.ContextOuterClass.Constraint_EndPointPriority.Builder, context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder> 
+          getEndpointPriorityFieldBuilder() {
+        if (endpointPriorityBuilder_ == null) {
+          if (!(constraintCase_ == 4)) {
+            constraint_ = context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+          }
+          endpointPriorityBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Constraint_EndPointPriority, context.ContextOuterClass.Constraint_EndPointPriority.Builder, context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder>(
+                  (context.ContextOuterClass.Constraint_EndPointPriority) constraint_,
+                  getParentForChildren(),
+                  isClean());
+          constraint_ = null;
+        }
+        constraintCase_ = 4;
+        onChanged();;
+        return endpointPriorityBuilder_;
+      }
+
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Constraint_SLA_Capacity, context.ContextOuterClass.Constraint_SLA_Capacity.Builder, context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder> slaCapacityBuilder_;
       /**
-       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
        * @return Whether the slaCapacity field is set.
        */
       @java.lang.Override
       public boolean hasSlaCapacity() {
-        return constraintCase_ == 4;
+        return constraintCase_ == 5;
       }
       /**
-       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
        * @return The slaCapacity.
        */
       @java.lang.Override
       public context.ContextOuterClass.Constraint_SLA_Capacity getSlaCapacity() {
         if (slaCapacityBuilder_ == null) {
-          if (constraintCase_ == 4) {
+          if (constraintCase_ == 5) {
             return (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_;
           }
           return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
         } else {
-          if (constraintCase_ == 4) {
+          if (constraintCase_ == 5) {
             return slaCapacityBuilder_.getMessage();
           }
           return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
        */
       public Builder setSlaCapacity(context.ContextOuterClass.Constraint_SLA_Capacity value) {
         if (slaCapacityBuilder_ == null) {
@@ -57369,11 +59477,11 @@ public final class ContextOuterClass {
         } else {
           slaCapacityBuilder_.setMessage(value);
         }
-        constraintCase_ = 4;
+        constraintCase_ = 5;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
        */
       public Builder setSlaCapacity(
           context.ContextOuterClass.Constraint_SLA_Capacity.Builder builderForValue) {
@@ -57383,15 +59491,15 @@ public final class ContextOuterClass {
         } else {
           slaCapacityBuilder_.setMessage(builderForValue.build());
         }
-        constraintCase_ = 4;
+        constraintCase_ = 5;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
        */
       public Builder mergeSlaCapacity(context.ContextOuterClass.Constraint_SLA_Capacity value) {
         if (slaCapacityBuilder_ == null) {
-          if (constraintCase_ == 4 &&
+          if (constraintCase_ == 5 &&
               constraint_ != context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance()) {
             constraint_ = context.ContextOuterClass.Constraint_SLA_Capacity.newBuilder((context.ContextOuterClass.Constraint_SLA_Capacity) constraint_)
                 .mergeFrom(value).buildPartial();
@@ -57400,26 +59508,26 @@ public final class ContextOuterClass {
           }
           onChanged();
         } else {
-          if (constraintCase_ == 4) {
+          if (constraintCase_ == 5) {
             slaCapacityBuilder_.mergeFrom(value);
           }
           slaCapacityBuilder_.setMessage(value);
         }
-        constraintCase_ = 4;
+        constraintCase_ = 5;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
        */
       public Builder clearSlaCapacity() {
         if (slaCapacityBuilder_ == null) {
-          if (constraintCase_ == 4) {
+          if (constraintCase_ == 5) {
             constraintCase_ = 0;
             constraint_ = null;
             onChanged();
           }
         } else {
-          if (constraintCase_ == 4) {
+          if (constraintCase_ == 5) {
             constraintCase_ = 0;
             constraint_ = null;
           }
@@ -57428,33 +59536,33 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
        */
       public context.ContextOuterClass.Constraint_SLA_Capacity.Builder getSlaCapacityBuilder() {
         return getSlaCapacityFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
        */
       @java.lang.Override
       public context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder getSlaCapacityOrBuilder() {
-        if ((constraintCase_ == 4) && (slaCapacityBuilder_ != null)) {
+        if ((constraintCase_ == 5) && (slaCapacityBuilder_ != null)) {
           return slaCapacityBuilder_.getMessageOrBuilder();
         } else {
-          if (constraintCase_ == 4) {
+          if (constraintCase_ == 5) {
             return (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_;
           }
           return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Constraint_SLA_Capacity, context.ContextOuterClass.Constraint_SLA_Capacity.Builder, context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder> 
           getSlaCapacityFieldBuilder() {
         if (slaCapacityBuilder_ == null) {
-          if (!(constraintCase_ == 4)) {
+          if (!(constraintCase_ == 5)) {
             constraint_ = context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
           }
           slaCapacityBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
@@ -57464,7 +59572,7 @@ public final class ContextOuterClass {
                   isClean());
           constraint_ = null;
         }
-        constraintCase_ = 4;
+        constraintCase_ = 5;
         onChanged();;
         return slaCapacityBuilder_;
       }
@@ -57472,33 +59580,33 @@ public final class ContextOuterClass {
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Constraint_SLA_Latency, context.ContextOuterClass.Constraint_SLA_Latency.Builder, context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder> slaLatencyBuilder_;
       /**
-       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
        * @return Whether the slaLatency field is set.
        */
       @java.lang.Override
       public boolean hasSlaLatency() {
-        return constraintCase_ == 5;
+        return constraintCase_ == 6;
       }
       /**
-       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
        * @return The slaLatency.
        */
       @java.lang.Override
       public context.ContextOuterClass.Constraint_SLA_Latency getSlaLatency() {
         if (slaLatencyBuilder_ == null) {
-          if (constraintCase_ == 5) {
+          if (constraintCase_ == 6) {
             return (context.ContextOuterClass.Constraint_SLA_Latency) constraint_;
           }
           return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
         } else {
-          if (constraintCase_ == 5) {
+          if (constraintCase_ == 6) {
             return slaLatencyBuilder_.getMessage();
           }
           return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
        */
       public Builder setSlaLatency(context.ContextOuterClass.Constraint_SLA_Latency value) {
         if (slaLatencyBuilder_ == null) {
@@ -57510,11 +59618,11 @@ public final class ContextOuterClass {
         } else {
           slaLatencyBuilder_.setMessage(value);
         }
-        constraintCase_ = 5;
+        constraintCase_ = 6;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
        */
       public Builder setSlaLatency(
           context.ContextOuterClass.Constraint_SLA_Latency.Builder builderForValue) {
@@ -57524,15 +59632,15 @@ public final class ContextOuterClass {
         } else {
           slaLatencyBuilder_.setMessage(builderForValue.build());
         }
-        constraintCase_ = 5;
+        constraintCase_ = 6;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
        */
       public Builder mergeSlaLatency(context.ContextOuterClass.Constraint_SLA_Latency value) {
         if (slaLatencyBuilder_ == null) {
-          if (constraintCase_ == 5 &&
+          if (constraintCase_ == 6 &&
               constraint_ != context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance()) {
             constraint_ = context.ContextOuterClass.Constraint_SLA_Latency.newBuilder((context.ContextOuterClass.Constraint_SLA_Latency) constraint_)
                 .mergeFrom(value).buildPartial();
@@ -57541,26 +59649,26 @@ public final class ContextOuterClass {
           }
           onChanged();
         } else {
-          if (constraintCase_ == 5) {
+          if (constraintCase_ == 6) {
             slaLatencyBuilder_.mergeFrom(value);
           }
           slaLatencyBuilder_.setMessage(value);
         }
-        constraintCase_ = 5;
+        constraintCase_ = 6;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
        */
       public Builder clearSlaLatency() {
         if (slaLatencyBuilder_ == null) {
-          if (constraintCase_ == 5) {
+          if (constraintCase_ == 6) {
             constraintCase_ = 0;
             constraint_ = null;
             onChanged();
           }
         } else {
-          if (constraintCase_ == 5) {
+          if (constraintCase_ == 6) {
             constraintCase_ = 0;
             constraint_ = null;
           }
@@ -57569,33 +59677,33 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
        */
       public context.ContextOuterClass.Constraint_SLA_Latency.Builder getSlaLatencyBuilder() {
         return getSlaLatencyFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
        */
       @java.lang.Override
       public context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder getSlaLatencyOrBuilder() {
-        if ((constraintCase_ == 5) && (slaLatencyBuilder_ != null)) {
+        if ((constraintCase_ == 6) && (slaLatencyBuilder_ != null)) {
           return slaLatencyBuilder_.getMessageOrBuilder();
         } else {
-          if (constraintCase_ == 5) {
+          if (constraintCase_ == 6) {
             return (context.ContextOuterClass.Constraint_SLA_Latency) constraint_;
           }
           return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Constraint_SLA_Latency, context.ContextOuterClass.Constraint_SLA_Latency.Builder, context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder> 
           getSlaLatencyFieldBuilder() {
         if (slaLatencyBuilder_ == null) {
-          if (!(constraintCase_ == 5)) {
+          if (!(constraintCase_ == 6)) {
             constraint_ = context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
           }
           slaLatencyBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
@@ -57605,7 +59713,7 @@ public final class ContextOuterClass {
                   isClean());
           constraint_ = null;
         }
-        constraintCase_ = 5;
+        constraintCase_ = 6;
         onChanged();;
         return slaLatencyBuilder_;
       }
@@ -57613,33 +59721,33 @@ public final class ContextOuterClass {
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Constraint_SLA_Availability, context.ContextOuterClass.Constraint_SLA_Availability.Builder, context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder> slaAvailabilityBuilder_;
       /**
-       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        * @return Whether the slaAvailability field is set.
        */
       @java.lang.Override
       public boolean hasSlaAvailability() {
-        return constraintCase_ == 6;
+        return constraintCase_ == 7;
       }
       /**
-       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        * @return The slaAvailability.
        */
       @java.lang.Override
       public context.ContextOuterClass.Constraint_SLA_Availability getSlaAvailability() {
         if (slaAvailabilityBuilder_ == null) {
-          if (constraintCase_ == 6) {
+          if (constraintCase_ == 7) {
             return (context.ContextOuterClass.Constraint_SLA_Availability) constraint_;
           }
           return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
         } else {
-          if (constraintCase_ == 6) {
+          if (constraintCase_ == 7) {
             return slaAvailabilityBuilder_.getMessage();
           }
           return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        */
       public Builder setSlaAvailability(context.ContextOuterClass.Constraint_SLA_Availability value) {
         if (slaAvailabilityBuilder_ == null) {
@@ -57651,11 +59759,11 @@ public final class ContextOuterClass {
         } else {
           slaAvailabilityBuilder_.setMessage(value);
         }
-        constraintCase_ = 6;
+        constraintCase_ = 7;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        */
       public Builder setSlaAvailability(
           context.ContextOuterClass.Constraint_SLA_Availability.Builder builderForValue) {
@@ -57665,15 +59773,15 @@ public final class ContextOuterClass {
         } else {
           slaAvailabilityBuilder_.setMessage(builderForValue.build());
         }
-        constraintCase_ = 6;
+        constraintCase_ = 7;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        */
       public Builder mergeSlaAvailability(context.ContextOuterClass.Constraint_SLA_Availability value) {
         if (slaAvailabilityBuilder_ == null) {
-          if (constraintCase_ == 6 &&
+          if (constraintCase_ == 7 &&
               constraint_ != context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance()) {
             constraint_ = context.ContextOuterClass.Constraint_SLA_Availability.newBuilder((context.ContextOuterClass.Constraint_SLA_Availability) constraint_)
                 .mergeFrom(value).buildPartial();
@@ -57682,26 +59790,26 @@ public final class ContextOuterClass {
           }
           onChanged();
         } else {
-          if (constraintCase_ == 6) {
+          if (constraintCase_ == 7) {
             slaAvailabilityBuilder_.mergeFrom(value);
           }
           slaAvailabilityBuilder_.setMessage(value);
         }
-        constraintCase_ = 6;
+        constraintCase_ = 7;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        */
       public Builder clearSlaAvailability() {
         if (slaAvailabilityBuilder_ == null) {
-          if (constraintCase_ == 6) {
+          if (constraintCase_ == 7) {
             constraintCase_ = 0;
             constraint_ = null;
             onChanged();
           }
         } else {
-          if (constraintCase_ == 6) {
+          if (constraintCase_ == 7) {
             constraintCase_ = 0;
             constraint_ = null;
           }
@@ -57710,33 +59818,33 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        */
       public context.ContextOuterClass.Constraint_SLA_Availability.Builder getSlaAvailabilityBuilder() {
         return getSlaAvailabilityFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        */
       @java.lang.Override
       public context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder getSlaAvailabilityOrBuilder() {
-        if ((constraintCase_ == 6) && (slaAvailabilityBuilder_ != null)) {
+        if ((constraintCase_ == 7) && (slaAvailabilityBuilder_ != null)) {
           return slaAvailabilityBuilder_.getMessageOrBuilder();
         } else {
-          if (constraintCase_ == 6) {
+          if (constraintCase_ == 7) {
             return (context.ContextOuterClass.Constraint_SLA_Availability) constraint_;
           }
           return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Constraint_SLA_Availability, context.ContextOuterClass.Constraint_SLA_Availability.Builder, context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder> 
           getSlaAvailabilityFieldBuilder() {
         if (slaAvailabilityBuilder_ == null) {
-          if (!(constraintCase_ == 6)) {
+          if (!(constraintCase_ == 7)) {
             constraint_ = context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
           }
           slaAvailabilityBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
@@ -57746,7 +59854,7 @@ public final class ContextOuterClass {
                   isClean());
           constraint_ = null;
         }
-        constraintCase_ = 6;
+        constraintCase_ = 7;
         onChanged();;
         return slaAvailabilityBuilder_;
       }
@@ -57754,33 +59862,33 @@ public final class ContextOuterClass {
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Constraint_SLA_Isolation_level, context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder, context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder> slaIsolationBuilder_;
       /**
-       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        * @return Whether the slaIsolation field is set.
        */
       @java.lang.Override
       public boolean hasSlaIsolation() {
-        return constraintCase_ == 7;
+        return constraintCase_ == 8;
       }
       /**
-       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        * @return The slaIsolation.
        */
       @java.lang.Override
       public context.ContextOuterClass.Constraint_SLA_Isolation_level getSlaIsolation() {
         if (slaIsolationBuilder_ == null) {
-          if (constraintCase_ == 7) {
+          if (constraintCase_ == 8) {
             return (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_;
           }
           return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
         } else {
-          if (constraintCase_ == 7) {
+          if (constraintCase_ == 8) {
             return slaIsolationBuilder_.getMessage();
           }
           return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        */
       public Builder setSlaIsolation(context.ContextOuterClass.Constraint_SLA_Isolation_level value) {
         if (slaIsolationBuilder_ == null) {
@@ -57792,11 +59900,11 @@ public final class ContextOuterClass {
         } else {
           slaIsolationBuilder_.setMessage(value);
         }
-        constraintCase_ = 7;
+        constraintCase_ = 8;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        */
       public Builder setSlaIsolation(
           context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder builderForValue) {
@@ -57806,15 +59914,15 @@ public final class ContextOuterClass {
         } else {
           slaIsolationBuilder_.setMessage(builderForValue.build());
         }
-        constraintCase_ = 7;
+        constraintCase_ = 8;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        */
       public Builder mergeSlaIsolation(context.ContextOuterClass.Constraint_SLA_Isolation_level value) {
         if (slaIsolationBuilder_ == null) {
-          if (constraintCase_ == 7 &&
+          if (constraintCase_ == 8 &&
               constraint_ != context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance()) {
             constraint_ = context.ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder((context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_)
                 .mergeFrom(value).buildPartial();
@@ -57823,26 +59931,26 @@ public final class ContextOuterClass {
           }
           onChanged();
         } else {
-          if (constraintCase_ == 7) {
+          if (constraintCase_ == 8) {
             slaIsolationBuilder_.mergeFrom(value);
           }
           slaIsolationBuilder_.setMessage(value);
         }
-        constraintCase_ = 7;
+        constraintCase_ = 8;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        */
       public Builder clearSlaIsolation() {
         if (slaIsolationBuilder_ == null) {
-          if (constraintCase_ == 7) {
+          if (constraintCase_ == 8) {
             constraintCase_ = 0;
             constraint_ = null;
             onChanged();
           }
         } else {
-          if (constraintCase_ == 7) {
+          if (constraintCase_ == 8) {
             constraintCase_ = 0;
             constraint_ = null;
           }
@@ -57851,33 +59959,33 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        */
       public context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder getSlaIsolationBuilder() {
         return getSlaIsolationFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        */
       @java.lang.Override
       public context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder getSlaIsolationOrBuilder() {
-        if ((constraintCase_ == 7) && (slaIsolationBuilder_ != null)) {
+        if ((constraintCase_ == 8) && (slaIsolationBuilder_ != null)) {
           return slaIsolationBuilder_.getMessageOrBuilder();
         } else {
-          if (constraintCase_ == 7) {
+          if (constraintCase_ == 8) {
             return (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_;
           }
           return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Constraint_SLA_Isolation_level, context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder, context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder> 
           getSlaIsolationFieldBuilder() {
         if (slaIsolationBuilder_ == null) {
-          if (!(constraintCase_ == 7)) {
+          if (!(constraintCase_ == 8)) {
             constraint_ = context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
           }
           slaIsolationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
@@ -57887,7 +59995,7 @@ public final class ContextOuterClass {
                   isClean());
           constraint_ = null;
         }
-        constraintCase_ = 7;
+        constraintCase_ = 8;
         onChanged();;
         return slaIsolationBuilder_;
       }
@@ -59665,6 +61773,11 @@ public final class ContextOuterClass {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_context_SliceStatus_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_SliceConfig_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_SliceConfig_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_context_SliceIdList_descriptor;
   private static final 
@@ -59780,6 +61893,11 @@ public final class ContextOuterClass {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_context_Constraint_EndPointLocation_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Constraint_EndPointPriority_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Constraint_EndPointPriority_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_context_Constraint_SLA_Latency_descriptor;
   private static final 
@@ -59893,194 +62011,200 @@ public final class ContextOuterClass {
       "nt\030\001 \001(\0132\016.context.Event\022&\n\nservice_id\030\002" +
       " \001(\0132\022.context.ServiceId\"T\n\007SliceId\022&\n\nc" +
       "ontext_id\030\001 \001(\0132\022.context.ContextId\022!\n\ns" +
-      "lice_uuid\030\002 \001(\0132\r.context.Uuid\"\346\002\n\005Slice" +
+      "lice_uuid\030\002 \001(\0132\r.context.Uuid\"\222\003\n\005Slice" +
       "\022\"\n\010slice_id\030\001 \001(\0132\020.context.SliceId\022/\n\022" +
       "slice_endpoint_ids\030\002 \003(\0132\023.context.EndPo" +
       "intId\022.\n\021slice_constraints\030\003 \003(\0132\023.conte" +
       "xt.Constraint\022-\n\021slice_service_ids\030\004 \003(\013" +
       "2\022.context.ServiceId\022,\n\022slice_subslice_i" +
       "ds\030\005 \003(\0132\020.context.SliceId\022*\n\014slice_stat" +
-      "us\030\006 \001(\0132\024.context.SliceStatus\022(\n\013slice_" +
-      "owner\030\007 \001(\0132\023.context.SliceOwner\022%\n\ttime" +
-      "stamp\030\010 \001(\0132\022.context.Timestamp\"E\n\nSlice" +
-      "Owner\022!\n\nowner_uuid\030\001 \001(\0132\r.context.Uuid" +
-      "\022\024\n\014owner_string\030\002 \001(\t\"=\n\013SliceStatus\022.\n" +
-      "\014slice_status\030\001 \001(\0162\030.context.SliceStatu" +
-      "sEnum\"2\n\013SliceIdList\022#\n\tslice_ids\030\001 \003(\0132" +
-      "\020.context.SliceId\"+\n\tSliceList\022\036\n\006slices" +
-      "\030\001 \003(\0132\016.context.Slice\"O\n\nSliceEvent\022\035\n\005" +
-      "event\030\001 \001(\0132\016.context.Event\022\"\n\010slice_id\030" +
-      "\002 \001(\0132\020.context.SliceId\"6\n\014ConnectionId\022" +
-      "&\n\017connection_uuid\030\001 \001(\0132\r.context.Uuid\"" +
-      "2\n\025ConnectionSettings_L0\022\031\n\021lsp_symbolic" +
-      "_name\030\001 \001(\t\"\236\001\n\025ConnectionSettings_L2\022\027\n" +
-      "\017src_mac_address\030\001 \001(\t\022\027\n\017dst_mac_addres" +
-      "s\030\002 \001(\t\022\022\n\nether_type\030\003 \001(\r\022\017\n\007vlan_id\030\004" +
-      " \001(\r\022\022\n\nmpls_label\030\005 \001(\r\022\032\n\022mpls_traffic" +
-      "_class\030\006 \001(\r\"t\n\025ConnectionSettings_L3\022\026\n" +
-      "\016src_ip_address\030\001 \001(\t\022\026\n\016dst_ip_address\030" +
-      "\002 \001(\t\022\014\n\004dscp\030\003 \001(\r\022\020\n\010protocol\030\004 \001(\r\022\013\n" +
-      "\003ttl\030\005 \001(\r\"[\n\025ConnectionSettings_L4\022\020\n\010s" +
-      "rc_port\030\001 \001(\r\022\020\n\010dst_port\030\002 \001(\r\022\021\n\ttcp_f" +
-      "lags\030\003 \001(\r\022\013\n\003ttl\030\004 \001(\r\"\304\001\n\022ConnectionSe" +
-      "ttings\022*\n\002l0\030\001 \001(\0132\036.context.ConnectionS" +
-      "ettings_L0\022*\n\002l2\030\002 \001(\0132\036.context.Connect" +
-      "ionSettings_L2\022*\n\002l3\030\003 \001(\0132\036.context.Con" +
-      "nectionSettings_L3\022*\n\002l4\030\004 \001(\0132\036.context" +
-      ".ConnectionSettings_L4\"\363\001\n\nConnection\022,\n" +
-      "\rconnection_id\030\001 \001(\0132\025.context.Connectio" +
-      "nId\022&\n\nservice_id\030\002 \001(\0132\022.context.Servic" +
-      "eId\0223\n\026path_hops_endpoint_ids\030\003 \003(\0132\023.co" +
-      "ntext.EndPointId\022+\n\017sub_service_ids\030\004 \003(" +
-      "\0132\022.context.ServiceId\022-\n\010settings\030\005 \001(\0132" +
-      "\033.context.ConnectionSettings\"A\n\020Connecti" +
-      "onIdList\022-\n\016connection_ids\030\001 \003(\0132\025.conte" +
-      "xt.ConnectionId\":\n\016ConnectionList\022(\n\013con" +
-      "nections\030\001 \003(\0132\023.context.Connection\"^\n\017C" +
-      "onnectionEvent\022\035\n\005event\030\001 \001(\0132\016.context." +
-      "Event\022,\n\rconnection_id\030\002 \001(\0132\025.context.C" +
-      "onnectionId\"\202\001\n\nEndPointId\022(\n\013topology_i" +
-      "d\030\001 \001(\0132\023.context.TopologyId\022$\n\tdevice_i" +
-      "d\030\002 \001(\0132\021.context.DeviceId\022$\n\rendpoint_u" +
-      "uid\030\003 \001(\0132\r.context.Uuid\"\264\001\n\010EndPoint\022(\n" +
-      "\013endpoint_id\030\001 \001(\0132\023.context.EndPointId\022" +
-      "\025\n\rendpoint_type\030\002 \001(\t\0229\n\020kpi_sample_typ" +
-      "es\030\003 \003(\0162\037.kpi_sample_types.KpiSampleTyp" +
-      "e\022,\n\021endpoint_location\030\004 \001(\0132\021.context.L" +
-      "ocation\"A\n\021ConfigRule_Custom\022\024\n\014resource" +
-      "_key\030\001 \001(\t\022\026\n\016resource_value\030\002 \001(\t\"]\n\016Co" +
-      "nfigRule_ACL\022(\n\013endpoint_id\030\001 \001(\0132\023.cont" +
-      "ext.EndPointId\022!\n\010rule_set\030\002 \001(\0132\017.acl.A" +
-      "clRuleSet\"\234\001\n\nConfigRule\022)\n\006action\030\001 \001(\016" +
-      "2\031.context.ConfigActionEnum\022,\n\006custom\030\002 " +
-      "\001(\0132\032.context.ConfigRule_CustomH\000\022&\n\003acl" +
-      "\030\003 \001(\0132\027.context.ConfigRule_ACLH\000B\r\n\013con" +
-      "fig_rule\"F\n\021Constraint_Custom\022\027\n\017constra" +
-      "int_type\030\001 \001(\t\022\030\n\020constraint_value\030\002 \001(\t" +
-      "\"E\n\023Constraint_Schedule\022\027\n\017start_timesta" +
-      "mp\030\001 \001(\002\022\025\n\rduration_days\030\002 \001(\002\"3\n\014GPS_P" +
-      "osition\022\020\n\010latitude\030\001 \001(\002\022\021\n\tlongitude\030\002" +
-      " \001(\002\"W\n\010Location\022\020\n\006region\030\001 \001(\tH\000\022-\n\014gp" +
-      "s_position\030\002 \001(\0132\025.context.GPS_PositionH" +
-      "\000B\n\n\010location\"l\n\033Constraint_EndPointLoca" +
-      "tion\022(\n\013endpoint_id\030\001 \001(\0132\023.context.EndP" +
-      "ointId\022#\n\010location\030\002 \001(\0132\021.context.Locat" +
-      "ion\"0\n\026Constraint_SLA_Latency\022\026\n\016e2e_lat" +
-      "ency_ms\030\001 \001(\002\"0\n\027Constraint_SLA_Capacity" +
-      "\022\025\n\rcapacity_gbps\030\001 \001(\002\"M\n\033Constraint_SL" +
-      "A_Availability\022\032\n\022num_disjoint_paths\030\001 \001" +
-      "(\r\022\022\n\nall_active\030\002 \001(\010\"V\n\036Constraint_SLA" +
-      "_Isolation_level\0224\n\017isolation_level\030\001 \001(" +
-      "\0162\033.context.IsolationLevelEnum\"\263\003\n\nConst" +
-      "raint\022,\n\006custom\030\001 \001(\0132\032.context.Constrai" +
-      "nt_CustomH\000\0220\n\010schedule\030\002 \001(\0132\034.context." +
-      "Constraint_ScheduleH\000\022A\n\021endpoint_locati" +
-      "on\030\003 \001(\0132$.context.Constraint_EndPointLo" +
-      "cationH\000\0228\n\014sla_capacity\030\004 \001(\0132 .context" +
-      ".Constraint_SLA_CapacityH\000\0226\n\013sla_latenc" +
-      "y\030\005 \001(\0132\037.context.Constraint_SLA_Latency" +
-      "H\000\022@\n\020sla_availability\030\006 \001(\0132$.context.C" +
-      "onstraint_SLA_AvailabilityH\000\022@\n\rsla_isol" +
-      "ation\030\007 \001(\0132\'.context.Constraint_SLA_Iso" +
-      "lation_levelH\000B\014\n\nconstraint\"^\n\022TeraFlow" +
-      "Controller\022&\n\ncontext_id\030\001 \001(\0132\022.context" +
-      ".ContextId\022\022\n\nip_address\030\002 \001(\t\022\014\n\004port\030\003" +
-      " \001(\r\"U\n\024AuthenticationResult\022&\n\ncontext_" +
-      "id\030\001 \001(\0132\022.context.ContextId\022\025\n\rauthenti" +
-      "cated\030\002 \001(\010*j\n\rEventTypeEnum\022\027\n\023EVENTTYP" +
-      "E_UNDEFINED\020\000\022\024\n\020EVENTTYPE_CREATE\020\001\022\024\n\020E" +
-      "VENTTYPE_UPDATE\020\002\022\024\n\020EVENTTYPE_REMOVE\020\003*" +
-      "\305\001\n\020DeviceDriverEnum\022\032\n\026DEVICEDRIVER_UND" +
-      "EFINED\020\000\022\033\n\027DEVICEDRIVER_OPENCONFIG\020\001\022\036\n" +
-      "\032DEVICEDRIVER_TRANSPORT_API\020\002\022\023\n\017DEVICED" +
-      "RIVER_P4\020\003\022&\n\"DEVICEDRIVER_IETF_NETWORK_" +
-      "TOPOLOGY\020\004\022\033\n\027DEVICEDRIVER_ONF_TR_352\020\005*" +
-      "\217\001\n\033DeviceOperationalStatusEnum\022%\n!DEVIC" +
-      "EOPERATIONALSTATUS_UNDEFINED\020\000\022$\n DEVICE" +
-      "OPERATIONALSTATUS_DISABLED\020\001\022#\n\037DEVICEOP" +
-      "ERATIONALSTATUS_ENABLED\020\002*\201\001\n\017ServiceTyp" +
-      "eEnum\022\027\n\023SERVICETYPE_UNKNOWN\020\000\022\024\n\020SERVIC" +
-      "ETYPE_L3NM\020\001\022\024\n\020SERVICETYPE_L2NM\020\002\022)\n%SE" +
-      "RVICETYPE_TAPI_CONNECTIVITY_SERVICE\020\003*\250\001" +
-      "\n\021ServiceStatusEnum\022\033\n\027SERVICESTATUS_UND" +
-      "EFINED\020\000\022\031\n\025SERVICESTATUS_PLANNED\020\001\022\030\n\024S" +
-      "ERVICESTATUS_ACTIVE\020\002\022!\n\035SERVICESTATUS_P" +
-      "ENDING_REMOVAL\020\003\022\036\n\032SERVICESTATUS_SLA_VI" +
-      "OLATED\020\004*\251\001\n\017SliceStatusEnum\022\031\n\025SLICESTA" +
-      "TUS_UNDEFINED\020\000\022\027\n\023SLICESTATUS_PLANNED\020\001" +
-      "\022\024\n\020SLICESTATUS_INIT\020\002\022\026\n\022SLICESTATUS_AC" +
-      "TIVE\020\003\022\026\n\022SLICESTATUS_DEINIT\020\004\022\034\n\030SLICES" +
-      "TATUS_SLA_VIOLATED\020\005*]\n\020ConfigActionEnum" +
-      "\022\032\n\026CONFIGACTION_UNDEFINED\020\000\022\024\n\020CONFIGAC" +
-      "TION_SET\020\001\022\027\n\023CONFIGACTION_DELETE\020\002*\203\002\n\022" +
-      "IsolationLevelEnum\022\020\n\014NO_ISOLATION\020\000\022\026\n\022" +
-      "PHYSICAL_ISOLATION\020\001\022\025\n\021LOGICAL_ISOLATIO" +
-      "N\020\002\022\025\n\021PROCESS_ISOLATION\020\003\022\035\n\031PHYSICAL_M" +
-      "EMORY_ISOLATION\020\004\022\036\n\032PHYSICAL_NETWORK_IS" +
-      "OLATION\020\005\022\036\n\032VIRTUAL_RESOURCE_ISOLATION\020" +
-      "\006\022\037\n\033NETWORK_FUNCTIONS_ISOLATION\020\007\022\025\n\021SE" +
-      "RVICE_ISOLATION\020\0102\357\022\n\016ContextService\022:\n\016" +
-      "ListContextIds\022\016.context.Empty\032\026.context" +
-      ".ContextIdList\"\000\0226\n\014ListContexts\022\016.conte" +
-      "xt.Empty\032\024.context.ContextList\"\000\0224\n\nGetC" +
-      "ontext\022\022.context.ContextId\032\020.context.Con" +
-      "text\"\000\0224\n\nSetContext\022\020.context.Context\032\022" +
-      ".context.ContextId\"\000\0225\n\rRemoveContext\022\022." +
-      "context.ContextId\032\016.context.Empty\"\000\022=\n\020G" +
-      "etContextEvents\022\016.context.Empty\032\025.contex" +
-      "t.ContextEvent\"\0000\001\022@\n\017ListTopologyIds\022\022." +
-      "context.ContextId\032\027.context.TopologyIdLi" +
-      "st\"\000\022=\n\016ListTopologies\022\022.context.Context" +
-      "Id\032\025.context.TopologyList\"\000\0227\n\013GetTopolo" +
-      "gy\022\023.context.TopologyId\032\021.context.Topolo" +
-      "gy\"\000\0227\n\013SetTopology\022\021.context.Topology\032\023" +
-      ".context.TopologyId\"\000\0227\n\016RemoveTopology\022" +
-      "\023.context.TopologyId\032\016.context.Empty\"\000\022?" +
-      "\n\021GetTopologyEvents\022\016.context.Empty\032\026.co" +
-      "ntext.TopologyEvent\"\0000\001\0228\n\rListDeviceIds" +
-      "\022\016.context.Empty\032\025.context.DeviceIdList\"" +
-      "\000\0224\n\013ListDevices\022\016.context.Empty\032\023.conte" +
-      "xt.DeviceList\"\000\0221\n\tGetDevice\022\021.context.D" +
-      "eviceId\032\017.context.Device\"\000\0221\n\tSetDevice\022" +
-      "\017.context.Device\032\021.context.DeviceId\"\000\0223\n" +
-      "\014RemoveDevice\022\021.context.DeviceId\032\016.conte" +
-      "xt.Empty\"\000\022;\n\017GetDeviceEvents\022\016.context." +
-      "Empty\032\024.context.DeviceEvent\"\0000\001\0224\n\013ListL" +
-      "inkIds\022\016.context.Empty\032\023.context.LinkIdL" +
-      "ist\"\000\0220\n\tListLinks\022\016.context.Empty\032\021.con" +
-      "text.LinkList\"\000\022+\n\007GetLink\022\017.context.Lin" +
-      "kId\032\r.context.Link\"\000\022+\n\007SetLink\022\r.contex" +
-      "t.Link\032\017.context.LinkId\"\000\022/\n\nRemoveLink\022" +
-      "\017.context.LinkId\032\016.context.Empty\"\000\0227\n\rGe" +
-      "tLinkEvents\022\016.context.Empty\032\022.context.Li" +
-      "nkEvent\"\0000\001\022>\n\016ListServiceIds\022\022.context." +
-      "ContextId\032\026.context.ServiceIdList\"\000\022:\n\014L" +
-      "istServices\022\022.context.ContextId\032\024.contex" +
-      "t.ServiceList\"\000\0224\n\nGetService\022\022.context." +
-      "ServiceId\032\020.context.Service\"\000\0224\n\nSetServ" +
-      "ice\022\020.context.Service\032\022.context.ServiceI" +
-      "d\"\000\0225\n\rRemoveService\022\022.context.ServiceId" +
-      "\032\016.context.Empty\"\000\022=\n\020GetServiceEvents\022\016" +
-      ".context.Empty\032\025.context.ServiceEvent\"\0000" +
-      "\001\022:\n\014ListSliceIds\022\022.context.ContextId\032\024." +
-      "context.SliceIdList\"\000\0226\n\nListSlices\022\022.co" +
-      "ntext.ContextId\032\022.context.SliceList\"\000\022.\n" +
-      "\010GetSlice\022\020.context.SliceId\032\016.context.Sl" +
-      "ice\"\000\022.\n\010SetSlice\022\016.context.Slice\032\020.cont" +
-      "ext.SliceId\"\000\0221\n\013RemoveSlice\022\020.context.S" +
-      "liceId\032\016.context.Empty\"\000\0229\n\016GetSliceEven" +
-      "ts\022\016.context.Empty\032\023.context.SliceEvent\"" +
-      "\0000\001\022D\n\021ListConnectionIds\022\022.context.Servi" +
-      "ceId\032\031.context.ConnectionIdList\"\000\022@\n\017Lis" +
-      "tConnections\022\022.context.ServiceId\032\027.conte" +
-      "xt.ConnectionList\"\000\022=\n\rGetConnection\022\025.c" +
-      "ontext.ConnectionId\032\023.context.Connection" +
-      "\"\000\022=\n\rSetConnection\022\023.context.Connection" +
-      "\032\025.context.ConnectionId\"\000\022;\n\020RemoveConne" +
-      "ction\022\025.context.ConnectionId\032\016.context.E" +
-      "mpty\"\000\022C\n\023GetConnectionEvents\022\016.context." +
-      "Empty\032\030.context.ConnectionEvent\"\0000\001b\006pro" +
-      "to3"
+      "us\030\006 \001(\0132\024.context.SliceStatus\022*\n\014slice_" +
+      "config\030\007 \001(\0132\024.context.SliceConfig\022(\n\013sl" +
+      "ice_owner\030\010 \001(\0132\023.context.SliceOwner\022%\n\t" +
+      "timestamp\030\t \001(\0132\022.context.Timestamp\"E\n\nS" +
+      "liceOwner\022!\n\nowner_uuid\030\001 \001(\0132\r.context." +
+      "Uuid\022\024\n\014owner_string\030\002 \001(\t\"=\n\013SliceStatu" +
+      "s\022.\n\014slice_status\030\001 \001(\0162\030.context.SliceS" +
+      "tatusEnum\"8\n\013SliceConfig\022)\n\014config_rules" +
+      "\030\001 \003(\0132\023.context.ConfigRule\"2\n\013SliceIdLi" +
+      "st\022#\n\tslice_ids\030\001 \003(\0132\020.context.SliceId\"" +
+      "+\n\tSliceList\022\036\n\006slices\030\001 \003(\0132\016.context.S" +
+      "lice\"O\n\nSliceEvent\022\035\n\005event\030\001 \001(\0132\016.cont" +
+      "ext.Event\022\"\n\010slice_id\030\002 \001(\0132\020.context.Sl" +
+      "iceId\"6\n\014ConnectionId\022&\n\017connection_uuid" +
+      "\030\001 \001(\0132\r.context.Uuid\"2\n\025ConnectionSetti" +
+      "ngs_L0\022\031\n\021lsp_symbolic_name\030\001 \001(\t\"\236\001\n\025Co" +
+      "nnectionSettings_L2\022\027\n\017src_mac_address\030\001" +
+      " \001(\t\022\027\n\017dst_mac_address\030\002 \001(\t\022\022\n\nether_t" +
+      "ype\030\003 \001(\r\022\017\n\007vlan_id\030\004 \001(\r\022\022\n\nmpls_label" +
+      "\030\005 \001(\r\022\032\n\022mpls_traffic_class\030\006 \001(\r\"t\n\025Co" +
+      "nnectionSettings_L3\022\026\n\016src_ip_address\030\001 " +
+      "\001(\t\022\026\n\016dst_ip_address\030\002 \001(\t\022\014\n\004dscp\030\003 \001(" +
+      "\r\022\020\n\010protocol\030\004 \001(\r\022\013\n\003ttl\030\005 \001(\r\"[\n\025Conn" +
+      "ectionSettings_L4\022\020\n\010src_port\030\001 \001(\r\022\020\n\010d" +
+      "st_port\030\002 \001(\r\022\021\n\ttcp_flags\030\003 \001(\r\022\013\n\003ttl\030" +
+      "\004 \001(\r\"\304\001\n\022ConnectionSettings\022*\n\002l0\030\001 \001(\013" +
+      "2\036.context.ConnectionSettings_L0\022*\n\002l2\030\002" +
+      " \001(\0132\036.context.ConnectionSettings_L2\022*\n\002" +
+      "l3\030\003 \001(\0132\036.context.ConnectionSettings_L3" +
+      "\022*\n\002l4\030\004 \001(\0132\036.context.ConnectionSetting" +
+      "s_L4\"\363\001\n\nConnection\022,\n\rconnection_id\030\001 \001" +
+      "(\0132\025.context.ConnectionId\022&\n\nservice_id\030" +
+      "\002 \001(\0132\022.context.ServiceId\0223\n\026path_hops_e" +
+      "ndpoint_ids\030\003 \003(\0132\023.context.EndPointId\022+" +
+      "\n\017sub_service_ids\030\004 \003(\0132\022.context.Servic" +
+      "eId\022-\n\010settings\030\005 \001(\0132\033.context.Connecti" +
+      "onSettings\"A\n\020ConnectionIdList\022-\n\016connec" +
+      "tion_ids\030\001 \003(\0132\025.context.ConnectionId\":\n" +
+      "\016ConnectionList\022(\n\013connections\030\001 \003(\0132\023.c" +
+      "ontext.Connection\"^\n\017ConnectionEvent\022\035\n\005" +
+      "event\030\001 \001(\0132\016.context.Event\022,\n\rconnectio" +
+      "n_id\030\002 \001(\0132\025.context.ConnectionId\"\202\001\n\nEn" +
+      "dPointId\022(\n\013topology_id\030\001 \001(\0132\023.context." +
+      "TopologyId\022$\n\tdevice_id\030\002 \001(\0132\021.context." +
+      "DeviceId\022$\n\rendpoint_uuid\030\003 \001(\0132\r.contex" +
+      "t.Uuid\"\264\001\n\010EndPoint\022(\n\013endpoint_id\030\001 \001(\013" +
+      "2\023.context.EndPointId\022\025\n\rendpoint_type\030\002" +
+      " \001(\t\0229\n\020kpi_sample_types\030\003 \003(\0162\037.kpi_sam" +
+      "ple_types.KpiSampleType\022,\n\021endpoint_loca" +
+      "tion\030\004 \001(\0132\021.context.Location\"A\n\021ConfigR" +
+      "ule_Custom\022\024\n\014resource_key\030\001 \001(\t\022\026\n\016reso" +
+      "urce_value\030\002 \001(\t\"]\n\016ConfigRule_ACL\022(\n\013en" +
+      "dpoint_id\030\001 \001(\0132\023.context.EndPointId\022!\n\010" +
+      "rule_set\030\002 \001(\0132\017.acl.AclRuleSet\"\234\001\n\nConf" +
+      "igRule\022)\n\006action\030\001 \001(\0162\031.context.ConfigA" +
+      "ctionEnum\022,\n\006custom\030\002 \001(\0132\032.context.Conf" +
+      "igRule_CustomH\000\022&\n\003acl\030\003 \001(\0132\027.context.C" +
+      "onfigRule_ACLH\000B\r\n\013config_rule\"F\n\021Constr" +
+      "aint_Custom\022\027\n\017constraint_type\030\001 \001(\t\022\030\n\020" +
+      "constraint_value\030\002 \001(\t\"E\n\023Constraint_Sch" +
+      "edule\022\027\n\017start_timestamp\030\001 \001(\002\022\025\n\rdurati" +
+      "on_days\030\002 \001(\002\"3\n\014GPS_Position\022\020\n\010latitud" +
+      "e\030\001 \001(\002\022\021\n\tlongitude\030\002 \001(\002\"W\n\010Location\022\020" +
+      "\n\006region\030\001 \001(\tH\000\022-\n\014gps_position\030\002 \001(\0132\025" +
+      ".context.GPS_PositionH\000B\n\n\010location\"l\n\033C" +
+      "onstraint_EndPointLocation\022(\n\013endpoint_i" +
+      "d\030\001 \001(\0132\023.context.EndPointId\022#\n\010location" +
+      "\030\002 \001(\0132\021.context.Location\"Y\n\033Constraint_" +
+      "EndPointPriority\022(\n\013endpoint_id\030\001 \001(\0132\023." +
+      "context.EndPointId\022\020\n\010priority\030\002 \001(\r\"0\n\026" +
+      "Constraint_SLA_Latency\022\026\n\016e2e_latency_ms" +
+      "\030\001 \001(\002\"0\n\027Constraint_SLA_Capacity\022\025\n\rcap" +
+      "acity_gbps\030\001 \001(\002\"M\n\033Constraint_SLA_Avail" +
+      "ability\022\032\n\022num_disjoint_paths\030\001 \001(\r\022\022\n\na" +
+      "ll_active\030\002 \001(\010\"V\n\036Constraint_SLA_Isolat" +
+      "ion_level\0224\n\017isolation_level\030\001 \003(\0162\033.con" +
+      "text.IsolationLevelEnum\"\366\003\n\nConstraint\022," +
+      "\n\006custom\030\001 \001(\0132\032.context.Constraint_Cust" +
+      "omH\000\0220\n\010schedule\030\002 \001(\0132\034.context.Constra" +
+      "int_ScheduleH\000\022A\n\021endpoint_location\030\003 \001(" +
+      "\0132$.context.Constraint_EndPointLocationH" +
+      "\000\022A\n\021endpoint_priority\030\004 \001(\0132$.context.C" +
+      "onstraint_EndPointPriorityH\000\0228\n\014sla_capa" +
+      "city\030\005 \001(\0132 .context.Constraint_SLA_Capa" +
+      "cityH\000\0226\n\013sla_latency\030\006 \001(\0132\037.context.Co" +
+      "nstraint_SLA_LatencyH\000\022@\n\020sla_availabili" +
+      "ty\030\007 \001(\0132$.context.Constraint_SLA_Availa" +
+      "bilityH\000\022@\n\rsla_isolation\030\010 \001(\0132\'.contex" +
+      "t.Constraint_SLA_Isolation_levelH\000B\014\n\nco" +
+      "nstraint\"^\n\022TeraFlowController\022&\n\ncontex" +
+      "t_id\030\001 \001(\0132\022.context.ContextId\022\022\n\nip_add" +
+      "ress\030\002 \001(\t\022\014\n\004port\030\003 \001(\r\"U\n\024Authenticati" +
+      "onResult\022&\n\ncontext_id\030\001 \001(\0132\022.context.C" +
+      "ontextId\022\025\n\rauthenticated\030\002 \001(\010*j\n\rEvent" +
+      "TypeEnum\022\027\n\023EVENTTYPE_UNDEFINED\020\000\022\024\n\020EVE" +
+      "NTTYPE_CREATE\020\001\022\024\n\020EVENTTYPE_UPDATE\020\002\022\024\n" +
+      "\020EVENTTYPE_REMOVE\020\003*\305\001\n\020DeviceDriverEnum" +
+      "\022\032\n\026DEVICEDRIVER_UNDEFINED\020\000\022\033\n\027DEVICEDR" +
+      "IVER_OPENCONFIG\020\001\022\036\n\032DEVICEDRIVER_TRANSP" +
+      "ORT_API\020\002\022\023\n\017DEVICEDRIVER_P4\020\003\022&\n\"DEVICE" +
+      "DRIVER_IETF_NETWORK_TOPOLOGY\020\004\022\033\n\027DEVICE" +
+      "DRIVER_ONF_TR_352\020\005*\217\001\n\033DeviceOperationa" +
+      "lStatusEnum\022%\n!DEVICEOPERATIONALSTATUS_U" +
+      "NDEFINED\020\000\022$\n DEVICEOPERATIONALSTATUS_DI" +
+      "SABLED\020\001\022#\n\037DEVICEOPERATIONALSTATUS_ENAB" +
+      "LED\020\002*\201\001\n\017ServiceTypeEnum\022\027\n\023SERVICETYPE" +
+      "_UNKNOWN\020\000\022\024\n\020SERVICETYPE_L3NM\020\001\022\024\n\020SERV" +
+      "ICETYPE_L2NM\020\002\022)\n%SERVICETYPE_TAPI_CONNE" +
+      "CTIVITY_SERVICE\020\003*\250\001\n\021ServiceStatusEnum\022" +
+      "\033\n\027SERVICESTATUS_UNDEFINED\020\000\022\031\n\025SERVICES" +
+      "TATUS_PLANNED\020\001\022\030\n\024SERVICESTATUS_ACTIVE\020" +
+      "\002\022!\n\035SERVICESTATUS_PENDING_REMOVAL\020\003\022\036\n\032" +
+      "SERVICESTATUS_SLA_VIOLATED\020\004*\251\001\n\017SliceSt" +
+      "atusEnum\022\031\n\025SLICESTATUS_UNDEFINED\020\000\022\027\n\023S" +
+      "LICESTATUS_PLANNED\020\001\022\024\n\020SLICESTATUS_INIT" +
+      "\020\002\022\026\n\022SLICESTATUS_ACTIVE\020\003\022\026\n\022SLICESTATU" +
+      "S_DEINIT\020\004\022\034\n\030SLICESTATUS_SLA_VIOLATED\020\005" +
+      "*]\n\020ConfigActionEnum\022\032\n\026CONFIGACTION_UND" +
+      "EFINED\020\000\022\024\n\020CONFIGACTION_SET\020\001\022\027\n\023CONFIG" +
+      "ACTION_DELETE\020\002*\203\002\n\022IsolationLevelEnum\022\020" +
+      "\n\014NO_ISOLATION\020\000\022\026\n\022PHYSICAL_ISOLATION\020\001" +
+      "\022\025\n\021LOGICAL_ISOLATION\020\002\022\025\n\021PROCESS_ISOLA" +
+      "TION\020\003\022\035\n\031PHYSICAL_MEMORY_ISOLATION\020\004\022\036\n" +
+      "\032PHYSICAL_NETWORK_ISOLATION\020\005\022\036\n\032VIRTUAL" +
+      "_RESOURCE_ISOLATION\020\006\022\037\n\033NETWORK_FUNCTIO" +
+      "NS_ISOLATION\020\007\022\025\n\021SERVICE_ISOLATION\020\0102\357\022" +
+      "\n\016ContextService\022:\n\016ListContextIds\022\016.con" +
+      "text.Empty\032\026.context.ContextIdList\"\000\0226\n\014" +
+      "ListContexts\022\016.context.Empty\032\024.context.C" +
+      "ontextList\"\000\0224\n\nGetContext\022\022.context.Con" +
+      "textId\032\020.context.Context\"\000\0224\n\nSetContext" +
+      "\022\020.context.Context\032\022.context.ContextId\"\000" +
+      "\0225\n\rRemoveContext\022\022.context.ContextId\032\016." +
+      "context.Empty\"\000\022=\n\020GetContextEvents\022\016.co" +
+      "ntext.Empty\032\025.context.ContextEvent\"\0000\001\022@" +
+      "\n\017ListTopologyIds\022\022.context.ContextId\032\027." +
+      "context.TopologyIdList\"\000\022=\n\016ListTopologi" +
+      "es\022\022.context.ContextId\032\025.context.Topolog" +
+      "yList\"\000\0227\n\013GetTopology\022\023.context.Topolog" +
+      "yId\032\021.context.Topology\"\000\0227\n\013SetTopology\022" +
+      "\021.context.Topology\032\023.context.TopologyId\"" +
+      "\000\0227\n\016RemoveTopology\022\023.context.TopologyId" +
+      "\032\016.context.Empty\"\000\022?\n\021GetTopologyEvents\022" +
+      "\016.context.Empty\032\026.context.TopologyEvent\"" +
+      "\0000\001\0228\n\rListDeviceIds\022\016.context.Empty\032\025.c" +
+      "ontext.DeviceIdList\"\000\0224\n\013ListDevices\022\016.c" +
+      "ontext.Empty\032\023.context.DeviceList\"\000\0221\n\tG" +
+      "etDevice\022\021.context.DeviceId\032\017.context.De" +
+      "vice\"\000\0221\n\tSetDevice\022\017.context.Device\032\021.c" +
+      "ontext.DeviceId\"\000\0223\n\014RemoveDevice\022\021.cont" +
+      "ext.DeviceId\032\016.context.Empty\"\000\022;\n\017GetDev" +
+      "iceEvents\022\016.context.Empty\032\024.context.Devi" +
+      "ceEvent\"\0000\001\0224\n\013ListLinkIds\022\016.context.Emp" +
+      "ty\032\023.context.LinkIdList\"\000\0220\n\tListLinks\022\016" +
+      ".context.Empty\032\021.context.LinkList\"\000\022+\n\007G" +
+      "etLink\022\017.context.LinkId\032\r.context.Link\"\000" +
+      "\022+\n\007SetLink\022\r.context.Link\032\017.context.Lin" +
+      "kId\"\000\022/\n\nRemoveLink\022\017.context.LinkId\032\016.c" +
+      "ontext.Empty\"\000\0227\n\rGetLinkEvents\022\016.contex" +
+      "t.Empty\032\022.context.LinkEvent\"\0000\001\022>\n\016ListS" +
+      "erviceIds\022\022.context.ContextId\032\026.context." +
+      "ServiceIdList\"\000\022:\n\014ListServices\022\022.contex" +
+      "t.ContextId\032\024.context.ServiceList\"\000\0224\n\nG" +
+      "etService\022\022.context.ServiceId\032\020.context." +
+      "Service\"\000\0224\n\nSetService\022\020.context.Servic" +
+      "e\032\022.context.ServiceId\"\000\0225\n\rRemoveService" +
+      "\022\022.context.ServiceId\032\016.context.Empty\"\000\022=" +
+      "\n\020GetServiceEvents\022\016.context.Empty\032\025.con" +
+      "text.ServiceEvent\"\0000\001\022:\n\014ListSliceIds\022\022." +
+      "context.ContextId\032\024.context.SliceIdList\"" +
+      "\000\0226\n\nListSlices\022\022.context.ContextId\032\022.co" +
+      "ntext.SliceList\"\000\022.\n\010GetSlice\022\020.context." +
+      "SliceId\032\016.context.Slice\"\000\022.\n\010SetSlice\022\016." +
+      "context.Slice\032\020.context.SliceId\"\000\0221\n\013Rem" +
+      "oveSlice\022\020.context.SliceId\032\016.context.Emp" +
+      "ty\"\000\0229\n\016GetSliceEvents\022\016.context.Empty\032\023" +
+      ".context.SliceEvent\"\0000\001\022D\n\021ListConnectio" +
+      "nIds\022\022.context.ServiceId\032\031.context.Conne" +
+      "ctionIdList\"\000\022@\n\017ListConnections\022\022.conte" +
+      "xt.ServiceId\032\027.context.ConnectionList\"\000\022" +
+      "=\n\rGetConnection\022\025.context.ConnectionId\032" +
+      "\023.context.Connection\"\000\022=\n\rSetConnection\022" +
+      "\023.context.Connection\032\025.context.Connectio" +
+      "nId\"\000\022;\n\020RemoveConnection\022\025.context.Conn" +
+      "ectionId\032\016.context.Empty\"\000\022C\n\023GetConnect" +
+      "ionEvents\022\016.context.Empty\032\030.context.Conn" +
+      "ectionEvent\"\0000\001b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -60291,7 +62415,7 @@ public final class ContextOuterClass {
     internal_static_context_Slice_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Slice_descriptor,
-        new java.lang.String[] { "SliceId", "SliceEndpointIds", "SliceConstraints", "SliceServiceIds", "SliceSubsliceIds", "SliceStatus", "SliceOwner", "Timestamp", });
+        new java.lang.String[] { "SliceId", "SliceEndpointIds", "SliceConstraints", "SliceServiceIds", "SliceSubsliceIds", "SliceStatus", "SliceConfig", "SliceOwner", "Timestamp", });
     internal_static_context_SliceOwner_descriptor =
       getDescriptor().getMessageTypes().get(34);
     internal_static_context_SliceOwner_fieldAccessorTable = new
@@ -60304,182 +62428,194 @@ public final class ContextOuterClass {
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_SliceStatus_descriptor,
         new java.lang.String[] { "SliceStatus", });
-    internal_static_context_SliceIdList_descriptor =
+    internal_static_context_SliceConfig_descriptor =
       getDescriptor().getMessageTypes().get(36);
+    internal_static_context_SliceConfig_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_SliceConfig_descriptor,
+        new java.lang.String[] { "ConfigRules", });
+    internal_static_context_SliceIdList_descriptor =
+      getDescriptor().getMessageTypes().get(37);
     internal_static_context_SliceIdList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_SliceIdList_descriptor,
         new java.lang.String[] { "SliceIds", });
     internal_static_context_SliceList_descriptor =
-      getDescriptor().getMessageTypes().get(37);
+      getDescriptor().getMessageTypes().get(38);
     internal_static_context_SliceList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_SliceList_descriptor,
         new java.lang.String[] { "Slices", });
     internal_static_context_SliceEvent_descriptor =
-      getDescriptor().getMessageTypes().get(38);
+      getDescriptor().getMessageTypes().get(39);
     internal_static_context_SliceEvent_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_SliceEvent_descriptor,
         new java.lang.String[] { "Event", "SliceId", });
     internal_static_context_ConnectionId_descriptor =
-      getDescriptor().getMessageTypes().get(39);
+      getDescriptor().getMessageTypes().get(40);
     internal_static_context_ConnectionId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionId_descriptor,
         new java.lang.String[] { "ConnectionUuid", });
     internal_static_context_ConnectionSettings_L0_descriptor =
-      getDescriptor().getMessageTypes().get(40);
+      getDescriptor().getMessageTypes().get(41);
     internal_static_context_ConnectionSettings_L0_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionSettings_L0_descriptor,
         new java.lang.String[] { "LspSymbolicName", });
     internal_static_context_ConnectionSettings_L2_descriptor =
-      getDescriptor().getMessageTypes().get(41);
+      getDescriptor().getMessageTypes().get(42);
     internal_static_context_ConnectionSettings_L2_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionSettings_L2_descriptor,
         new java.lang.String[] { "SrcMacAddress", "DstMacAddress", "EtherType", "VlanId", "MplsLabel", "MplsTrafficClass", });
     internal_static_context_ConnectionSettings_L3_descriptor =
-      getDescriptor().getMessageTypes().get(42);
+      getDescriptor().getMessageTypes().get(43);
     internal_static_context_ConnectionSettings_L3_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionSettings_L3_descriptor,
         new java.lang.String[] { "SrcIpAddress", "DstIpAddress", "Dscp", "Protocol", "Ttl", });
     internal_static_context_ConnectionSettings_L4_descriptor =
-      getDescriptor().getMessageTypes().get(43);
+      getDescriptor().getMessageTypes().get(44);
     internal_static_context_ConnectionSettings_L4_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionSettings_L4_descriptor,
         new java.lang.String[] { "SrcPort", "DstPort", "TcpFlags", "Ttl", });
     internal_static_context_ConnectionSettings_descriptor =
-      getDescriptor().getMessageTypes().get(44);
+      getDescriptor().getMessageTypes().get(45);
     internal_static_context_ConnectionSettings_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionSettings_descriptor,
         new java.lang.String[] { "L0", "L2", "L3", "L4", });
     internal_static_context_Connection_descriptor =
-      getDescriptor().getMessageTypes().get(45);
+      getDescriptor().getMessageTypes().get(46);
     internal_static_context_Connection_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Connection_descriptor,
         new java.lang.String[] { "ConnectionId", "ServiceId", "PathHopsEndpointIds", "SubServiceIds", "Settings", });
     internal_static_context_ConnectionIdList_descriptor =
-      getDescriptor().getMessageTypes().get(46);
+      getDescriptor().getMessageTypes().get(47);
     internal_static_context_ConnectionIdList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionIdList_descriptor,
         new java.lang.String[] { "ConnectionIds", });
     internal_static_context_ConnectionList_descriptor =
-      getDescriptor().getMessageTypes().get(47);
+      getDescriptor().getMessageTypes().get(48);
     internal_static_context_ConnectionList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionList_descriptor,
         new java.lang.String[] { "Connections", });
     internal_static_context_ConnectionEvent_descriptor =
-      getDescriptor().getMessageTypes().get(48);
+      getDescriptor().getMessageTypes().get(49);
     internal_static_context_ConnectionEvent_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionEvent_descriptor,
         new java.lang.String[] { "Event", "ConnectionId", });
     internal_static_context_EndPointId_descriptor =
-      getDescriptor().getMessageTypes().get(49);
+      getDescriptor().getMessageTypes().get(50);
     internal_static_context_EndPointId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_EndPointId_descriptor,
         new java.lang.String[] { "TopologyId", "DeviceId", "EndpointUuid", });
     internal_static_context_EndPoint_descriptor =
-      getDescriptor().getMessageTypes().get(50);
+      getDescriptor().getMessageTypes().get(51);
     internal_static_context_EndPoint_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_EndPoint_descriptor,
         new java.lang.String[] { "EndpointId", "EndpointType", "KpiSampleTypes", "EndpointLocation", });
     internal_static_context_ConfigRule_Custom_descriptor =
-      getDescriptor().getMessageTypes().get(51);
+      getDescriptor().getMessageTypes().get(52);
     internal_static_context_ConfigRule_Custom_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConfigRule_Custom_descriptor,
         new java.lang.String[] { "ResourceKey", "ResourceValue", });
     internal_static_context_ConfigRule_ACL_descriptor =
-      getDescriptor().getMessageTypes().get(52);
+      getDescriptor().getMessageTypes().get(53);
     internal_static_context_ConfigRule_ACL_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConfigRule_ACL_descriptor,
         new java.lang.String[] { "EndpointId", "RuleSet", });
     internal_static_context_ConfigRule_descriptor =
-      getDescriptor().getMessageTypes().get(53);
+      getDescriptor().getMessageTypes().get(54);
     internal_static_context_ConfigRule_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConfigRule_descriptor,
         new java.lang.String[] { "Action", "Custom", "Acl", "ConfigRule", });
     internal_static_context_Constraint_Custom_descriptor =
-      getDescriptor().getMessageTypes().get(54);
+      getDescriptor().getMessageTypes().get(55);
     internal_static_context_Constraint_Custom_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_Custom_descriptor,
         new java.lang.String[] { "ConstraintType", "ConstraintValue", });
     internal_static_context_Constraint_Schedule_descriptor =
-      getDescriptor().getMessageTypes().get(55);
+      getDescriptor().getMessageTypes().get(56);
     internal_static_context_Constraint_Schedule_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_Schedule_descriptor,
         new java.lang.String[] { "StartTimestamp", "DurationDays", });
     internal_static_context_GPS_Position_descriptor =
-      getDescriptor().getMessageTypes().get(56);
+      getDescriptor().getMessageTypes().get(57);
     internal_static_context_GPS_Position_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_GPS_Position_descriptor,
         new java.lang.String[] { "Latitude", "Longitude", });
     internal_static_context_Location_descriptor =
-      getDescriptor().getMessageTypes().get(57);
+      getDescriptor().getMessageTypes().get(58);
     internal_static_context_Location_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Location_descriptor,
         new java.lang.String[] { "Region", "GpsPosition", "Location", });
     internal_static_context_Constraint_EndPointLocation_descriptor =
-      getDescriptor().getMessageTypes().get(58);
+      getDescriptor().getMessageTypes().get(59);
     internal_static_context_Constraint_EndPointLocation_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_EndPointLocation_descriptor,
         new java.lang.String[] { "EndpointId", "Location", });
+    internal_static_context_Constraint_EndPointPriority_descriptor =
+      getDescriptor().getMessageTypes().get(60);
+    internal_static_context_Constraint_EndPointPriority_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Constraint_EndPointPriority_descriptor,
+        new java.lang.String[] { "EndpointId", "Priority", });
     internal_static_context_Constraint_SLA_Latency_descriptor =
-      getDescriptor().getMessageTypes().get(59);
+      getDescriptor().getMessageTypes().get(61);
     internal_static_context_Constraint_SLA_Latency_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_SLA_Latency_descriptor,
         new java.lang.String[] { "E2ELatencyMs", });
     internal_static_context_Constraint_SLA_Capacity_descriptor =
-      getDescriptor().getMessageTypes().get(60);
+      getDescriptor().getMessageTypes().get(62);
     internal_static_context_Constraint_SLA_Capacity_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_SLA_Capacity_descriptor,
         new java.lang.String[] { "CapacityGbps", });
     internal_static_context_Constraint_SLA_Availability_descriptor =
-      getDescriptor().getMessageTypes().get(61);
+      getDescriptor().getMessageTypes().get(63);
     internal_static_context_Constraint_SLA_Availability_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_SLA_Availability_descriptor,
         new java.lang.String[] { "NumDisjointPaths", "AllActive", });
     internal_static_context_Constraint_SLA_Isolation_level_descriptor =
-      getDescriptor().getMessageTypes().get(62);
+      getDescriptor().getMessageTypes().get(64);
     internal_static_context_Constraint_SLA_Isolation_level_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_SLA_Isolation_level_descriptor,
         new java.lang.String[] { "IsolationLevel", });
     internal_static_context_Constraint_descriptor =
-      getDescriptor().getMessageTypes().get(63);
+      getDescriptor().getMessageTypes().get(65);
     internal_static_context_Constraint_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_descriptor,
-        new java.lang.String[] { "Custom", "Schedule", "EndpointLocation", "SlaCapacity", "SlaLatency", "SlaAvailability", "SlaIsolation", "Constraint", });
+        new java.lang.String[] { "Custom", "Schedule", "EndpointLocation", "EndpointPriority", "SlaCapacity", "SlaLatency", "SlaAvailability", "SlaIsolation", "Constraint", });
     internal_static_context_TeraFlowController_descriptor =
-      getDescriptor().getMessageTypes().get(64);
+      getDescriptor().getMessageTypes().get(66);
     internal_static_context_TeraFlowController_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_TeraFlowController_descriptor,
         new java.lang.String[] { "ContextId", "IpAddress", "Port", });
     internal_static_context_AuthenticationResult_descriptor =
-      getDescriptor().getMessageTypes().get(65);
+      getDescriptor().getMessageTypes().get(67);
     internal_static_context_AuthenticationResult_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_AuthenticationResult_descriptor,
diff --git a/src/automation/target/generated-sources/grpc/monitoring/Monitoring.java b/src/automation/target/generated-sources/grpc/monitoring/Monitoring.java
index 5d63d4aa45e578957a7a3414c33491cebe98acbe..9d05f3da8a831e74922e65473206539680c8d78b 100644
--- a/src/automation/target/generated-sources/grpc/monitoring/Monitoring.java
+++ b/src/automation/target/generated-sources/grpc/monitoring/Monitoring.java
@@ -19,85 +19,124 @@ public final class Monitoring {
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>string kpi_description = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
+     */
+    boolean hasKpiId();
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return The kpiId.
+     */
+    monitoring.Monitoring.KpiId getKpiId();
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     */
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
+
+    /**
+     * <code>string kpi_description = 2;</code>
      * @return The kpiDescription.
      */
     java.lang.String getKpiDescription();
     /**
-     * <code>string kpi_description = 1;</code>
+     * <code>string kpi_description = 2;</code>
      * @return The bytes for kpiDescription.
      */
     com.google.protobuf.ByteString
         getKpiDescriptionBytes();
 
     /**
-     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    java.util.List<monitoring.Monitoring.KpiId> 
+        getKpiIdListList();
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    monitoring.Monitoring.KpiId getKpiIdList(int index);
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    int getKpiIdListCount();
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+        getKpiIdListOrBuilderList();
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
+        int index);
+
+    /**
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
      * @return The enum numeric value on the wire for kpiSampleType.
      */
     int getKpiSampleTypeValue();
     /**
-     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
      * @return The kpiSampleType.
      */
     kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType();
 
     /**
-     * <code>.context.DeviceId device_id = 3;</code>
+     * <code>.context.DeviceId device_id = 5;</code>
      * @return Whether the deviceId field is set.
      */
     boolean hasDeviceId();
     /**
-     * <code>.context.DeviceId device_id = 3;</code>
+     * <code>.context.DeviceId device_id = 5;</code>
      * @return The deviceId.
      */
     context.ContextOuterClass.DeviceId getDeviceId();
     /**
-     * <code>.context.DeviceId device_id = 3;</code>
+     * <code>.context.DeviceId device_id = 5;</code>
      */
     context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
 
     /**
-     * <code>.context.EndPointId endpoint_id = 4;</code>
+     * <code>.context.EndPointId endpoint_id = 6;</code>
      * @return Whether the endpointId field is set.
      */
     boolean hasEndpointId();
     /**
-     * <code>.context.EndPointId endpoint_id = 4;</code>
+     * <code>.context.EndPointId endpoint_id = 6;</code>
      * @return The endpointId.
      */
     context.ContextOuterClass.EndPointId getEndpointId();
     /**
-     * <code>.context.EndPointId endpoint_id = 4;</code>
+     * <code>.context.EndPointId endpoint_id = 6;</code>
      */
     context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
 
     /**
-     * <code>.context.ServiceId service_id = 5;</code>
+     * <code>.context.ServiceId service_id = 7;</code>
      * @return Whether the serviceId field is set.
      */
     boolean hasServiceId();
     /**
-     * <code>.context.ServiceId service_id = 5;</code>
+     * <code>.context.ServiceId service_id = 7;</code>
      * @return The serviceId.
      */
     context.ContextOuterClass.ServiceId getServiceId();
     /**
-     * <code>.context.ServiceId service_id = 5;</code>
+     * <code>.context.ServiceId service_id = 7;</code>
      */
     context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
 
     /**
-     * <code>.context.SliceId slice_id = 6;</code>
+     * <code>.context.SliceId slice_id = 8;</code>
      * @return Whether the sliceId field is set.
      */
     boolean hasSliceId();
     /**
-     * <code>.context.SliceId slice_id = 6;</code>
+     * <code>.context.SliceId slice_id = 8;</code>
      * @return The sliceId.
      */
     context.ContextOuterClass.SliceId getSliceId();
     /**
-     * <code>.context.SliceId slice_id = 6;</code>
+     * <code>.context.SliceId slice_id = 8;</code>
      */
     context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
   }
@@ -115,6 +154,7 @@ public final class Monitoring {
     }
     private KpiDescriptor() {
       kpiDescription_ = "";
+      kpiIdList_ = java.util.Collections.emptyList();
       kpiSampleType_ = 0;
     }
 
@@ -138,6 +178,7 @@ public final class Monitoring {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -149,18 +190,40 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
+              monitoring.Monitoring.KpiId.Builder subBuilder = null;
+              if (kpiId_ != null) {
+                subBuilder = kpiId_.toBuilder();
+              }
+              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiId_);
+                kpiId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
               java.lang.String s = input.readStringRequireUtf8();
 
               kpiDescription_ = s;
               break;
             }
-            case 16: {
+            case 26: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                kpiIdList_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              kpiIdList_.add(
+                  input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry));
+              break;
+            }
+            case 32: {
               int rawValue = input.readEnum();
 
               kpiSampleType_ = rawValue;
               break;
             }
-            case 26: {
+            case 42: {
               context.ContextOuterClass.DeviceId.Builder subBuilder = null;
               if (deviceId_ != null) {
                 subBuilder = deviceId_.toBuilder();
@@ -173,7 +236,7 @@ public final class Monitoring {
 
               break;
             }
-            case 34: {
+            case 50: {
               context.ContextOuterClass.EndPointId.Builder subBuilder = null;
               if (endpointId_ != null) {
                 subBuilder = endpointId_.toBuilder();
@@ -186,7 +249,7 @@ public final class Monitoring {
 
               break;
             }
-            case 42: {
+            case 58: {
               context.ContextOuterClass.ServiceId.Builder subBuilder = null;
               if (serviceId_ != null) {
                 subBuilder = serviceId_.toBuilder();
@@ -199,7 +262,7 @@ public final class Monitoring {
 
               break;
             }
-            case 50: {
+            case 66: {
               context.ContextOuterClass.SliceId.Builder subBuilder = null;
               if (sliceId_ != null) {
                 subBuilder = sliceId_.toBuilder();
@@ -227,6 +290,9 @@ public final class Monitoring {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          kpiIdList_ = java.util.Collections.unmodifiableList(kpiIdList_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
@@ -244,10 +310,36 @@ public final class Monitoring {
               monitoring.Monitoring.KpiDescriptor.class, monitoring.Monitoring.KpiDescriptor.Builder.class);
     }
 
-    public static final int KPI_DESCRIPTION_FIELD_NUMBER = 1;
+    public static final int KPI_ID_FIELD_NUMBER = 1;
+    private monitoring.Monitoring.KpiId kpiId_;
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
+     */
+    @java.lang.Override
+    public boolean hasKpiId() {
+      return kpiId_ != null;
+    }
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return The kpiId.
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiId getKpiId() {
+      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+    }
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+      return getKpiId();
+    }
+
+    public static final int KPI_DESCRIPTION_FIELD_NUMBER = 2;
     private volatile java.lang.Object kpiDescription_;
     /**
-     * <code>string kpi_description = 1;</code>
+     * <code>string kpi_description = 2;</code>
      * @return The kpiDescription.
      */
     @java.lang.Override
@@ -264,7 +356,7 @@ public final class Monitoring {
       }
     }
     /**
-     * <code>string kpi_description = 1;</code>
+     * <code>string kpi_description = 2;</code>
      * @return The bytes for kpiDescription.
      */
     @java.lang.Override
@@ -282,17 +374,57 @@ public final class Monitoring {
       }
     }
 
-    public static final int KPI_SAMPLE_TYPE_FIELD_NUMBER = 2;
+    public static final int KPI_ID_LIST_FIELD_NUMBER = 3;
+    private java.util.List<monitoring.Monitoring.KpiId> kpiIdList_;
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<monitoring.Monitoring.KpiId> getKpiIdListList() {
+      return kpiIdList_;
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+        getKpiIdListOrBuilderList() {
+      return kpiIdList_;
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    @java.lang.Override
+    public int getKpiIdListCount() {
+      return kpiIdList_.size();
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiId getKpiIdList(int index) {
+      return kpiIdList_.get(index);
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
+        int index) {
+      return kpiIdList_.get(index);
+    }
+
+    public static final int KPI_SAMPLE_TYPE_FIELD_NUMBER = 4;
     private int kpiSampleType_;
     /**
-     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
      * @return The enum numeric value on the wire for kpiSampleType.
      */
     @java.lang.Override public int getKpiSampleTypeValue() {
       return kpiSampleType_;
     }
     /**
-     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
      * @return The kpiSampleType.
      */
     @java.lang.Override public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType() {
@@ -301,10 +433,10 @@ public final class Monitoring {
       return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
     }
 
-    public static final int DEVICE_ID_FIELD_NUMBER = 3;
+    public static final int DEVICE_ID_FIELD_NUMBER = 5;
     private context.ContextOuterClass.DeviceId deviceId_;
     /**
-     * <code>.context.DeviceId device_id = 3;</code>
+     * <code>.context.DeviceId device_id = 5;</code>
      * @return Whether the deviceId field is set.
      */
     @java.lang.Override
@@ -312,7 +444,7 @@ public final class Monitoring {
       return deviceId_ != null;
     }
     /**
-     * <code>.context.DeviceId device_id = 3;</code>
+     * <code>.context.DeviceId device_id = 5;</code>
      * @return The deviceId.
      */
     @java.lang.Override
@@ -320,17 +452,17 @@ public final class Monitoring {
       return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
     }
     /**
-     * <code>.context.DeviceId device_id = 3;</code>
+     * <code>.context.DeviceId device_id = 5;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
       return getDeviceId();
     }
 
-    public static final int ENDPOINT_ID_FIELD_NUMBER = 4;
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 6;
     private context.ContextOuterClass.EndPointId endpointId_;
     /**
-     * <code>.context.EndPointId endpoint_id = 4;</code>
+     * <code>.context.EndPointId endpoint_id = 6;</code>
      * @return Whether the endpointId field is set.
      */
     @java.lang.Override
@@ -338,7 +470,7 @@ public final class Monitoring {
       return endpointId_ != null;
     }
     /**
-     * <code>.context.EndPointId endpoint_id = 4;</code>
+     * <code>.context.EndPointId endpoint_id = 6;</code>
      * @return The endpointId.
      */
     @java.lang.Override
@@ -346,17 +478,17 @@ public final class Monitoring {
       return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
     }
     /**
-     * <code>.context.EndPointId endpoint_id = 4;</code>
+     * <code>.context.EndPointId endpoint_id = 6;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
       return getEndpointId();
     }
 
-    public static final int SERVICE_ID_FIELD_NUMBER = 5;
+    public static final int SERVICE_ID_FIELD_NUMBER = 7;
     private context.ContextOuterClass.ServiceId serviceId_;
     /**
-     * <code>.context.ServiceId service_id = 5;</code>
+     * <code>.context.ServiceId service_id = 7;</code>
      * @return Whether the serviceId field is set.
      */
     @java.lang.Override
@@ -364,7 +496,7 @@ public final class Monitoring {
       return serviceId_ != null;
     }
     /**
-     * <code>.context.ServiceId service_id = 5;</code>
+     * <code>.context.ServiceId service_id = 7;</code>
      * @return The serviceId.
      */
     @java.lang.Override
@@ -372,17 +504,17 @@ public final class Monitoring {
       return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
     }
     /**
-     * <code>.context.ServiceId service_id = 5;</code>
+     * <code>.context.ServiceId service_id = 7;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
       return getServiceId();
     }
 
-    public static final int SLICE_ID_FIELD_NUMBER = 6;
+    public static final int SLICE_ID_FIELD_NUMBER = 8;
     private context.ContextOuterClass.SliceId sliceId_;
     /**
-     * <code>.context.SliceId slice_id = 6;</code>
+     * <code>.context.SliceId slice_id = 8;</code>
      * @return Whether the sliceId field is set.
      */
     @java.lang.Override
@@ -390,7 +522,7 @@ public final class Monitoring {
       return sliceId_ != null;
     }
     /**
-     * <code>.context.SliceId slice_id = 6;</code>
+     * <code>.context.SliceId slice_id = 8;</code>
      * @return The sliceId.
      */
     @java.lang.Override
@@ -398,7 +530,7 @@ public final class Monitoring {
       return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
     }
     /**
-     * <code>.context.SliceId slice_id = 6;</code>
+     * <code>.context.SliceId slice_id = 8;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
@@ -419,23 +551,29 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
+      if (kpiId_ != null) {
+        output.writeMessage(1, getKpiId());
+      }
       if (!getKpiDescriptionBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, kpiDescription_);
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, kpiDescription_);
+      }
+      for (int i = 0; i < kpiIdList_.size(); i++) {
+        output.writeMessage(3, kpiIdList_.get(i));
       }
       if (kpiSampleType_ != kpi_sample_types.KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN.getNumber()) {
-        output.writeEnum(2, kpiSampleType_);
+        output.writeEnum(4, kpiSampleType_);
       }
       if (deviceId_ != null) {
-        output.writeMessage(3, getDeviceId());
+        output.writeMessage(5, getDeviceId());
       }
       if (endpointId_ != null) {
-        output.writeMessage(4, getEndpointId());
+        output.writeMessage(6, getEndpointId());
       }
       if (serviceId_ != null) {
-        output.writeMessage(5, getServiceId());
+        output.writeMessage(7, getServiceId());
       }
       if (sliceId_ != null) {
-        output.writeMessage(6, getSliceId());
+        output.writeMessage(8, getSliceId());
       }
       unknownFields.writeTo(output);
     }
@@ -446,28 +584,36 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
+      if (kpiId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getKpiId());
+      }
       if (!getKpiDescriptionBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, kpiDescription_);
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, kpiDescription_);
+      }
+      for (int i = 0; i < kpiIdList_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, kpiIdList_.get(i));
       }
       if (kpiSampleType_ != kpi_sample_types.KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN.getNumber()) {
         size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(2, kpiSampleType_);
+          .computeEnumSize(4, kpiSampleType_);
       }
       if (deviceId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, getDeviceId());
+          .computeMessageSize(5, getDeviceId());
       }
       if (endpointId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, getEndpointId());
+          .computeMessageSize(6, getEndpointId());
       }
       if (serviceId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, getServiceId());
+          .computeMessageSize(7, getServiceId());
       }
       if (sliceId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, getSliceId());
+          .computeMessageSize(8, getSliceId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -484,8 +630,15 @@ public final class Monitoring {
       }
       monitoring.Monitoring.KpiDescriptor other = (monitoring.Monitoring.KpiDescriptor) obj;
 
+      if (hasKpiId() != other.hasKpiId()) return false;
+      if (hasKpiId()) {
+        if (!getKpiId()
+            .equals(other.getKpiId())) return false;
+      }
       if (!getKpiDescription()
           .equals(other.getKpiDescription())) return false;
+      if (!getKpiIdListList()
+          .equals(other.getKpiIdListList())) return false;
       if (kpiSampleType_ != other.kpiSampleType_) return false;
       if (hasDeviceId() != other.hasDeviceId()) return false;
       if (hasDeviceId()) {
@@ -518,8 +671,16 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasKpiId()) {
+        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiId().hashCode();
+      }
       hash = (37 * hash) + KPI_DESCRIPTION_FIELD_NUMBER;
       hash = (53 * hash) + getKpiDescription().hashCode();
+      if (getKpiIdListCount() > 0) {
+        hash = (37 * hash) + KPI_ID_LIST_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiIdListList().hashCode();
+      }
       hash = (37 * hash) + KPI_SAMPLE_TYPE_FIELD_NUMBER;
       hash = (53 * hash) + kpiSampleType_;
       if (hasDeviceId()) {
@@ -666,13 +827,26 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getKpiIdListFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
+        }
         kpiDescription_ = "";
 
+        if (kpiIdListBuilder_ == null) {
+          kpiIdList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          kpiIdListBuilder_.clear();
+        }
         kpiSampleType_ = 0;
 
         if (deviceIdBuilder_ == null) {
@@ -725,7 +899,22 @@ public final class Monitoring {
       @java.lang.Override
       public monitoring.Monitoring.KpiDescriptor buildPartial() {
         monitoring.Monitoring.KpiDescriptor result = new monitoring.Monitoring.KpiDescriptor(this);
+        int from_bitField0_ = bitField0_;
+        if (kpiIdBuilder_ == null) {
+          result.kpiId_ = kpiId_;
+        } else {
+          result.kpiId_ = kpiIdBuilder_.build();
+        }
         result.kpiDescription_ = kpiDescription_;
+        if (kpiIdListBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            kpiIdList_ = java.util.Collections.unmodifiableList(kpiIdList_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.kpiIdList_ = kpiIdList_;
+        } else {
+          result.kpiIdList_ = kpiIdListBuilder_.build();
+        }
         result.kpiSampleType_ = kpiSampleType_;
         if (deviceIdBuilder_ == null) {
           result.deviceId_ = deviceId_;
@@ -795,14 +984,43 @@ public final class Monitoring {
 
       public Builder mergeFrom(monitoring.Monitoring.KpiDescriptor other) {
         if (other == monitoring.Monitoring.KpiDescriptor.getDefaultInstance()) return this;
+        if (other.hasKpiId()) {
+          mergeKpiId(other.getKpiId());
+        }
         if (!other.getKpiDescription().isEmpty()) {
           kpiDescription_ = other.kpiDescription_;
           onChanged();
         }
-        if (other.kpiSampleType_ != 0) {
-          setKpiSampleTypeValue(other.getKpiSampleTypeValue());
-        }
-        if (other.hasDeviceId()) {
+        if (kpiIdListBuilder_ == null) {
+          if (!other.kpiIdList_.isEmpty()) {
+            if (kpiIdList_.isEmpty()) {
+              kpiIdList_ = other.kpiIdList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureKpiIdListIsMutable();
+              kpiIdList_.addAll(other.kpiIdList_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.kpiIdList_.isEmpty()) {
+            if (kpiIdListBuilder_.isEmpty()) {
+              kpiIdListBuilder_.dispose();
+              kpiIdListBuilder_ = null;
+              kpiIdList_ = other.kpiIdList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              kpiIdListBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getKpiIdListFieldBuilder() : null;
+            } else {
+              kpiIdListBuilder_.addAllMessages(other.kpiIdList_);
+            }
+          }
+        }
+        if (other.kpiSampleType_ != 0) {
+          setKpiSampleTypeValue(other.getKpiSampleTypeValue());
+        }
+        if (other.hasDeviceId()) {
           mergeDeviceId(other.getDeviceId());
         }
         if (other.hasEndpointId()) {
@@ -842,10 +1060,130 @@ public final class Monitoring {
         }
         return this;
       }
+      private int bitField0_;
+
+      private monitoring.Monitoring.KpiId kpiId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * @return Whether the kpiId field is set.
+       */
+      public boolean hasKpiId() {
+        return kpiIdBuilder_ != null || kpiId_ != null;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * @return The kpiId.
+       */
+      public monitoring.Monitoring.KpiId getKpiId() {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+        } else {
+          return kpiIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiId_ = value;
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder setKpiId(
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (kpiId_ != null) {
+            kpiId_ =
+              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+          } else {
+            kpiId_ = value;
+          }
+          onChanged();
+        } else {
+          kpiIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder clearKpiId() {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+          onChanged();
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
+        
+        onChanged();
+        return getKpiIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+        if (kpiIdBuilder_ != null) {
+          return kpiIdBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiId_ == null ?
+              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+        }
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
+          getKpiIdFieldBuilder() {
+        if (kpiIdBuilder_ == null) {
+          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
+                  getKpiId(),
+                  getParentForChildren(),
+                  isClean());
+          kpiId_ = null;
+        }
+        return kpiIdBuilder_;
+      }
 
       private java.lang.Object kpiDescription_ = "";
       /**
-       * <code>string kpi_description = 1;</code>
+       * <code>string kpi_description = 2;</code>
        * @return The kpiDescription.
        */
       public java.lang.String getKpiDescription() {
@@ -861,7 +1199,7 @@ public final class Monitoring {
         }
       }
       /**
-       * <code>string kpi_description = 1;</code>
+       * <code>string kpi_description = 2;</code>
        * @return The bytes for kpiDescription.
        */
       public com.google.protobuf.ByteString
@@ -878,7 +1216,7 @@ public final class Monitoring {
         }
       }
       /**
-       * <code>string kpi_description = 1;</code>
+       * <code>string kpi_description = 2;</code>
        * @param value The kpiDescription to set.
        * @return This builder for chaining.
        */
@@ -893,7 +1231,7 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <code>string kpi_description = 1;</code>
+       * <code>string kpi_description = 2;</code>
        * @return This builder for chaining.
        */
       public Builder clearKpiDescription() {
@@ -903,7 +1241,7 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <code>string kpi_description = 1;</code>
+       * <code>string kpi_description = 2;</code>
        * @param value The bytes for kpiDescription to set.
        * @return This builder for chaining.
        */
@@ -919,548 +1257,788 @@ public final class Monitoring {
         return this;
       }
 
-      private int kpiSampleType_ = 0;
-      /**
-       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
-       * @return The enum numeric value on the wire for kpiSampleType.
-       */
-      @java.lang.Override public int getKpiSampleTypeValue() {
-        return kpiSampleType_;
-      }
-      /**
-       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
-       * @param value The enum numeric value on the wire for kpiSampleType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setKpiSampleTypeValue(int value) {
-        
-        kpiSampleType_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
-       * @return The kpiSampleType.
-       */
-      @java.lang.Override
-      public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType() {
-        @SuppressWarnings("deprecation")
-        kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(kpiSampleType_);
-        return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
+      private java.util.List<monitoring.Monitoring.KpiId> kpiIdList_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiIdListIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiIdList_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>(kpiIdList_);
+          bitField0_ |= 0x00000001;
+         }
       }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdListBuilder_;
+
       /**
-       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
-       * @param value The kpiSampleType to set.
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
        */
-      public Builder setKpiSampleType(kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
-        if (value == null) {
-          throw new NullPointerException();
+      public java.util.List<monitoring.Monitoring.KpiId> getKpiIdListList() {
+        if (kpiIdListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(kpiIdList_);
+        } else {
+          return kpiIdListBuilder_.getMessageList();
         }
-        
-        kpiSampleType_ = value.getNumber();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearKpiSampleType() {
-        
-        kpiSampleType_ = 0;
-        onChanged();
-        return this;
       }
-
-      private context.ContextOuterClass.DeviceId deviceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
       /**
-       * <code>.context.DeviceId device_id = 3;</code>
-       * @return Whether the deviceId field is set.
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
        */
-      public boolean hasDeviceId() {
-        return deviceIdBuilder_ != null || deviceId_ != null;
+      public int getKpiIdListCount() {
+        if (kpiIdListBuilder_ == null) {
+          return kpiIdList_.size();
+        } else {
+          return kpiIdListBuilder_.getCount();
+        }
       }
       /**
-       * <code>.context.DeviceId device_id = 3;</code>
-       * @return The deviceId.
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
        */
-      public context.ContextOuterClass.DeviceId getDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+      public monitoring.Monitoring.KpiId getKpiIdList(int index) {
+        if (kpiIdListBuilder_ == null) {
+          return kpiIdList_.get(index);
         } else {
-          return deviceIdBuilder_.getMessage();
+          return kpiIdListBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>.context.DeviceId device_id = 3;</code>
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
        */
-      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
+      public Builder setKpiIdList(
+          int index, monitoring.Monitoring.KpiId value) {
+        if (kpiIdListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          deviceId_ = value;
+          ensureKpiIdListIsMutable();
+          kpiIdList_.set(index, value);
           onChanged();
         } else {
-          deviceIdBuilder_.setMessage(value);
+          kpiIdListBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 3;</code>
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
        */
-      public Builder setDeviceId(
-          context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = builderForValue.build();
+      public Builder setKpiIdList(
+          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          kpiIdList_.set(index, builderForValue.build());
           onChanged();
         } else {
-          deviceIdBuilder_.setMessage(builderForValue.build());
+          kpiIdListBuilder_.setMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 3;</code>
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
        */
-      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
-          if (deviceId_ != null) {
-            deviceId_ =
-              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
-          } else {
-            deviceId_ = value;
+      public Builder addKpiIdList(monitoring.Monitoring.KpiId value) {
+        if (kpiIdListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureKpiIdListIsMutable();
+          kpiIdList_.add(value);
           onChanged();
         } else {
-          deviceIdBuilder_.mergeFrom(value);
+          kpiIdListBuilder_.addMessage(value);
         }
-
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 3;</code>
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
        */
-      public Builder clearDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
+      public Builder addKpiIdList(
+          int index, monitoring.Monitoring.KpiId value) {
+        if (kpiIdListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdListIsMutable();
+          kpiIdList_.add(index, value);
           onChanged();
         } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
+          kpiIdListBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 3;</code>
-       */
-      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
-        
-        onChanged();
-        return getDeviceIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.DeviceId device_id = 3;</code>
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
        */
-      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-        if (deviceIdBuilder_ != null) {
-          return deviceIdBuilder_.getMessageOrBuilder();
+      public Builder addKpiIdList(
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          kpiIdList_.add(builderForValue.build());
+          onChanged();
         } else {
-          return deviceId_ == null ?
-              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+          kpiIdListBuilder_.addMessage(builderForValue.build());
         }
+        return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 3;</code>
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
-          getDeviceIdFieldBuilder() {
-        if (deviceIdBuilder_ == null) {
-          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
-                  getDeviceId(),
-                  getParentForChildren(),
-                  isClean());
-          deviceId_ = null;
+      public Builder addKpiIdList(
+          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          kpiIdList_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiIdListBuilder_.addMessage(index, builderForValue.build());
         }
-        return deviceIdBuilder_;
-      }
-
-      private context.ContextOuterClass.EndPointId endpointId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
-      /**
-       * <code>.context.EndPointId endpoint_id = 4;</code>
-       * @return Whether the endpointId field is set.
-       */
-      public boolean hasEndpointId() {
-        return endpointIdBuilder_ != null || endpointId_ != null;
+        return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 4;</code>
-       * @return The endpointId.
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
        */
-      public context.ContextOuterClass.EndPointId getEndpointId() {
-        if (endpointIdBuilder_ == null) {
-          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+      public Builder addAllKpiIdList(
+          java.lang.Iterable<? extends monitoring.Monitoring.KpiId> values) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, kpiIdList_);
+          onChanged();
         } else {
-          return endpointIdBuilder_.getMessage();
+          kpiIdListBuilder_.addAllMessages(values);
         }
+        return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 4;</code>
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
        */
-      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
-        if (endpointIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          endpointId_ = value;
+      public Builder clearKpiIdList() {
+        if (kpiIdListBuilder_ == null) {
+          kpiIdList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          endpointIdBuilder_.setMessage(value);
+          kpiIdListBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 4;</code>
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
        */
-      public Builder setEndpointId(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = builderForValue.build();
+      public Builder removeKpiIdList(int index) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          kpiIdList_.remove(index);
           onChanged();
         } else {
-          endpointIdBuilder_.setMessage(builderForValue.build());
+          kpiIdListBuilder_.remove(index);
         }
-
         return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 4;</code>
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
        */
-      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
-        if (endpointIdBuilder_ == null) {
-          if (endpointId_ != null) {
-            endpointId_ =
-              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
-          } else {
-            endpointId_ = value;
-          }
-          onChanged();
-        } else {
-          endpointIdBuilder_.mergeFrom(value);
+      public monitoring.Monitoring.KpiId.Builder getKpiIdListBuilder(
+          int index) {
+        return getKpiIdListFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
+          int index) {
+        if (kpiIdListBuilder_ == null) {
+          return kpiIdList_.get(index);  } else {
+          return kpiIdListBuilder_.getMessageOrBuilder(index);
         }
-
-        return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 4;</code>
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
        */
-      public Builder clearEndpointId() {
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = null;
-          onChanged();
+      public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+           getKpiIdListOrBuilderList() {
+        if (kpiIdListBuilder_ != null) {
+          return kpiIdListBuilder_.getMessageOrBuilderList();
         } else {
-          endpointId_ = null;
-          endpointIdBuilder_ = null;
+          return java.util.Collections.unmodifiableList(kpiIdList_);
         }
-
-        return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 4;</code>
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
-        
-        onChanged();
-        return getEndpointIdFieldBuilder().getBuilder();
+      public monitoring.Monitoring.KpiId.Builder addKpiIdListBuilder() {
+        return getKpiIdListFieldBuilder().addBuilder(
+            monitoring.Monitoring.KpiId.getDefaultInstance());
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 4;</code>
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
        */
-      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-        if (endpointIdBuilder_ != null) {
-          return endpointIdBuilder_.getMessageOrBuilder();
-        } else {
-          return endpointId_ == null ?
-              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
-        }
+      public monitoring.Monitoring.KpiId.Builder addKpiIdListBuilder(
+          int index) {
+        return getKpiIdListFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.KpiId.getDefaultInstance());
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 4;</code>
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getEndpointIdFieldBuilder() {
-        if (endpointIdBuilder_ == null) {
-          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  getEndpointId(),
+      public java.util.List<monitoring.Monitoring.KpiId.Builder> 
+           getKpiIdListBuilderList() {
+        return getKpiIdListFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
+          getKpiIdListFieldBuilder() {
+        if (kpiIdListBuilder_ == null) {
+          kpiIdListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
+                  kpiIdList_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          endpointId_ = null;
+          kpiIdList_ = null;
         }
-        return endpointIdBuilder_;
+        return kpiIdListBuilder_;
       }
 
-      private context.ContextOuterClass.ServiceId serviceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
+      private int kpiSampleType_ = 0;
       /**
-       * <code>.context.ServiceId service_id = 5;</code>
-       * @return Whether the serviceId field is set.
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+       * @return The enum numeric value on the wire for kpiSampleType.
        */
-      public boolean hasServiceId() {
-        return serviceIdBuilder_ != null || serviceId_ != null;
+      @java.lang.Override public int getKpiSampleTypeValue() {
+        return kpiSampleType_;
       }
       /**
-       * <code>.context.ServiceId service_id = 5;</code>
-       * @return The serviceId.
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+       * @param value The enum numeric value on the wire for kpiSampleType to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ServiceId getServiceId() {
-        if (serviceIdBuilder_ == null) {
-          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
-        } else {
-          return serviceIdBuilder_.getMessage();
-        }
+      public Builder setKpiSampleTypeValue(int value) {
+        
+        kpiSampleType_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 5;</code>
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+       * @return The kpiSampleType.
        */
-      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          serviceId_ = value;
-          onChanged();
-        } else {
-          serviceIdBuilder_.setMessage(value);
-        }
+      @java.lang.Override
+      public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType() {
+        @SuppressWarnings("deprecation")
+        kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(kpiSampleType_);
+        return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+       * @param value The kpiSampleType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setKpiSampleType(kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        kpiSampleType_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearKpiSampleType() {
+        
+        kpiSampleType_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private context.ContextOuterClass.DeviceId deviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
+      /**
+       * <code>.context.DeviceId device_id = 5;</code>
+       * @return Whether the deviceId field is set.
+       */
+      public boolean hasDeviceId() {
+        return deviceIdBuilder_ != null || deviceId_ != null;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 5;</code>
+       * @return The deviceId.
+       */
+      public context.ContextOuterClass.DeviceId getDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+        } else {
+          return deviceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.DeviceId device_id = 5;</code>
+       */
+      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          deviceId_ = value;
+          onChanged();
+        } else {
+          deviceIdBuilder_.setMessage(value);
+        }
 
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 5;</code>
+       * <code>.context.DeviceId device_id = 5;</code>
        */
-      public Builder setServiceId(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = builderForValue.build();
+      public Builder setDeviceId(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = builderForValue.build();
           onChanged();
         } else {
-          serviceIdBuilder_.setMessage(builderForValue.build());
+          deviceIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 5;</code>
+       * <code>.context.DeviceId device_id = 5;</code>
        */
-      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
-          if (serviceId_ != null) {
-            serviceId_ =
-              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
+      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (deviceId_ != null) {
+            deviceId_ =
+              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
           } else {
-            serviceId_ = value;
+            deviceId_ = value;
           }
           onChanged();
         } else {
-          serviceIdBuilder_.mergeFrom(value);
+          deviceIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 5;</code>
+       * <code>.context.DeviceId device_id = 5;</code>
        */
-      public Builder clearServiceId() {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
+      public Builder clearDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
           onChanged();
         } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 5;</code>
+       * <code>.context.DeviceId device_id = 5;</code>
        */
-      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
         
         onChanged();
-        return getServiceIdFieldBuilder().getBuilder();
+        return getDeviceIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.ServiceId service_id = 5;</code>
+       * <code>.context.DeviceId device_id = 5;</code>
        */
-      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-        if (serviceIdBuilder_ != null) {
-          return serviceIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+        if (deviceIdBuilder_ != null) {
+          return deviceIdBuilder_.getMessageOrBuilder();
         } else {
-          return serviceId_ == null ?
-              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+          return deviceId_ == null ?
+              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
         }
       }
       /**
-       * <code>.context.ServiceId service_id = 5;</code>
+       * <code>.context.DeviceId device_id = 5;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getServiceIdFieldBuilder() {
-        if (serviceIdBuilder_ == null) {
-          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  getServiceId(),
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdFieldBuilder() {
+        if (deviceIdBuilder_ == null) {
+          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  getDeviceId(),
                   getParentForChildren(),
                   isClean());
-          serviceId_ = null;
+          deviceId_ = null;
         }
-        return serviceIdBuilder_;
+        return deviceIdBuilder_;
       }
 
-      private context.ContextOuterClass.SliceId sliceId_;
+      private context.ContextOuterClass.EndPointId endpointId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
       /**
-       * <code>.context.SliceId slice_id = 6;</code>
-       * @return Whether the sliceId field is set.
+       * <code>.context.EndPointId endpoint_id = 6;</code>
+       * @return Whether the endpointId field is set.
        */
-      public boolean hasSliceId() {
-        return sliceIdBuilder_ != null || sliceId_ != null;
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
       }
       /**
-       * <code>.context.SliceId slice_id = 6;</code>
-       * @return The sliceId.
+       * <code>.context.EndPointId endpoint_id = 6;</code>
+       * @return The endpointId.
        */
-      public context.ContextOuterClass.SliceId getSliceId() {
-        if (sliceIdBuilder_ == null) {
-          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+      public context.ContextOuterClass.EndPointId getEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         } else {
-          return sliceIdBuilder_.getMessage();
+          return endpointIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.SliceId slice_id = 6;</code>
+       * <code>.context.EndPointId endpoint_id = 6;</code>
        */
-      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
-        if (sliceIdBuilder_ == null) {
+      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          sliceId_ = value;
+          endpointId_ = value;
           onChanged();
         } else {
-          sliceIdBuilder_.setMessage(value);
+          endpointIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 6;</code>
+       * <code>.context.EndPointId endpoint_id = 6;</code>
        */
-      public Builder setSliceId(
-          context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = builderForValue.build();
+      public Builder setEndpointId(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = builderForValue.build();
           onChanged();
         } else {
-          sliceIdBuilder_.setMessage(builderForValue.build());
+          endpointIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 6;</code>
+       * <code>.context.EndPointId endpoint_id = 6;</code>
        */
-      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
-        if (sliceIdBuilder_ == null) {
-          if (sliceId_ != null) {
-            sliceId_ =
-              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
+      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (endpointId_ != null) {
+            endpointId_ =
+              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
           } else {
-            sliceId_ = value;
+            endpointId_ = value;
           }
           onChanged();
         } else {
-          sliceIdBuilder_.mergeFrom(value);
+          endpointIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 6;</code>
+       * <code>.context.EndPointId endpoint_id = 6;</code>
        */
-      public Builder clearSliceId() {
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = null;
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
           onChanged();
         } else {
-          sliceId_ = null;
-          sliceIdBuilder_ = null;
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 6;</code>
+       * <code>.context.EndPointId endpoint_id = 6;</code>
        */
-      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
         
         onChanged();
-        return getSliceIdFieldBuilder().getBuilder();
+        return getEndpointIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.SliceId slice_id = 6;</code>
+       * <code>.context.EndPointId endpoint_id = 6;</code>
        */
-      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
-        if (sliceIdBuilder_ != null) {
-          return sliceIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+        if (endpointIdBuilder_ != null) {
+          return endpointIdBuilder_.getMessageOrBuilder();
         } else {
-          return sliceId_ == null ?
-              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+          return endpointId_ == null ?
+              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         }
       }
       /**
-       * <code>.context.SliceId slice_id = 6;</code>
+       * <code>.context.EndPointId endpoint_id = 6;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
-          getSliceIdFieldBuilder() {
-        if (sliceIdBuilder_ == null) {
-          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
-                  getSliceId(),
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getEndpointIdFieldBuilder() {
+        if (endpointIdBuilder_ == null) {
+          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  getEndpointId(),
                   getParentForChildren(),
                   isClean());
-          sliceId_ = null;
+          endpointId_ = null;
         }
-        return sliceIdBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
+        return endpointIdBuilder_;
       }
 
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
+      private context.ContextOuterClass.ServiceId serviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
+      /**
+       * <code>.context.ServiceId service_id = 7;</code>
+       * @return Whether the serviceId field is set.
+       */
+      public boolean hasServiceId() {
+        return serviceIdBuilder_ != null || serviceId_ != null;
       }
-
-
+      /**
+       * <code>.context.ServiceId service_id = 7;</code>
+       * @return The serviceId.
+       */
+      public context.ContextOuterClass.ServiceId getServiceId() {
+        if (serviceIdBuilder_ == null) {
+          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        } else {
+          return serviceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 7;</code>
+       */
+      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceId_ = value;
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 7;</code>
+       */
+      public Builder setServiceId(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 7;</code>
+       */
+      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (serviceId_ != null) {
+            serviceId_ =
+              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
+          } else {
+            serviceId_ = value;
+          }
+          onChanged();
+        } else {
+          serviceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 7;</code>
+       */
+      public Builder clearServiceId() {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+          onChanged();
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 7;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+        
+        onChanged();
+        return getServiceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ServiceId service_id = 7;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+        if (serviceIdBuilder_ != null) {
+          return serviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 7;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdFieldBuilder() {
+        if (serviceIdBuilder_ == null) {
+          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  getServiceId(),
+                  getParentForChildren(),
+                  isClean());
+          serviceId_ = null;
+        }
+        return serviceIdBuilder_;
+      }
+
+      private context.ContextOuterClass.SliceId sliceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
+      /**
+       * <code>.context.SliceId slice_id = 8;</code>
+       * @return Whether the sliceId field is set.
+       */
+      public boolean hasSliceId() {
+        return sliceIdBuilder_ != null || sliceId_ != null;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 8;</code>
+       * @return The sliceId.
+       */
+      public context.ContextOuterClass.SliceId getSliceId() {
+        if (sliceIdBuilder_ == null) {
+          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+        } else {
+          return sliceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.SliceId slice_id = 8;</code>
+       */
+      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          sliceId_ = value;
+          onChanged();
+        } else {
+          sliceIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 8;</code>
+       */
+      public Builder setSliceId(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          sliceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 8;</code>
+       */
+      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (sliceId_ != null) {
+            sliceId_ =
+              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
+          } else {
+            sliceId_ = value;
+          }
+          onChanged();
+        } else {
+          sliceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 8;</code>
+       */
+      public Builder clearSliceId() {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
+          onChanged();
+        } else {
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 8;</code>
+       */
+      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
+        
+        onChanged();
+        return getSliceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.SliceId slice_id = 8;</code>
+       */
+      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+        if (sliceIdBuilder_ != null) {
+          return sliceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return sliceId_ == null ?
+              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+        }
+      }
+      /**
+       * <code>.context.SliceId slice_id = 8;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
+          getSliceIdFieldBuilder() {
+        if (sliceIdBuilder_ == null) {
+          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
+                  getSliceId(),
+                  getParentForChildren(),
+                  isClean());
+          sliceId_ = null;
+        }
+        return sliceIdBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
       // @@protoc_insertion_point(builder_scope:monitoring.KpiDescriptor)
     }
 
@@ -1501,140 +2079,61 @@ public final class Monitoring {
 
   }
 
-  public interface BundleKpiDescriptorOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.BundleKpiDescriptor)
+  public interface MonitorKpiRequestOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.MonitorKpiRequest)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>string kpi_description = 1;</code>
-     * @return The kpiDescription.
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
      */
-    java.lang.String getKpiDescription();
+    boolean hasKpiId();
     /**
-     * <code>string kpi_description = 1;</code>
-     * @return The bytes for kpiDescription.
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return The kpiId.
      */
-    com.google.protobuf.ByteString
-        getKpiDescriptionBytes();
-
+    monitoring.Monitoring.KpiId getKpiId();
     /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
      */
-    java.util.List<monitoring.Monitoring.KpiId> 
-        getKpiIdListList();
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
-     */
-    monitoring.Monitoring.KpiId getKpiIdList(int index);
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
-     */
-    int getKpiIdListCount();
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
-     */
-    java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
-        getKpiIdListOrBuilderList();
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
-     */
-    monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
-        int index);
-
-    /**
-     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
-     * @return The enum numeric value on the wire for kpiSampleType.
-     */
-    int getKpiSampleTypeValue();
-    /**
-     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
-     * @return The kpiSampleType.
-     */
-    kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType();
-
-    /**
-     * <code>.context.DeviceId device_id = 4;</code>
-     * @return Whether the deviceId field is set.
-     */
-    boolean hasDeviceId();
-    /**
-     * <code>.context.DeviceId device_id = 4;</code>
-     * @return The deviceId.
-     */
-    context.ContextOuterClass.DeviceId getDeviceId();
-    /**
-     * <code>.context.DeviceId device_id = 4;</code>
-     */
-    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
-
-    /**
-     * <code>.context.EndPointId endpoint_id = 5;</code>
-     * @return Whether the endpointId field is set.
-     */
-    boolean hasEndpointId();
-    /**
-     * <code>.context.EndPointId endpoint_id = 5;</code>
-     * @return The endpointId.
-     */
-    context.ContextOuterClass.EndPointId getEndpointId();
-    /**
-     * <code>.context.EndPointId endpoint_id = 5;</code>
-     */
-    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
 
     /**
-     * <code>.context.ServiceId service_id = 6;</code>
-     * @return Whether the serviceId field is set.
-     */
-    boolean hasServiceId();
-    /**
-     * <code>.context.ServiceId service_id = 6;</code>
-     * @return The serviceId.
-     */
-    context.ContextOuterClass.ServiceId getServiceId();
-    /**
-     * <code>.context.ServiceId service_id = 6;</code>
+     * <code>float monitoring_window_s = 2;</code>
+     * @return The monitoringWindowS.
      */
-    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
+    float getMonitoringWindowS();
 
     /**
-     * <code>.context.SliceId slice_id = 7;</code>
-     * @return Whether the sliceId field is set.
-     */
-    boolean hasSliceId();
-    /**
-     * <code>.context.SliceId slice_id = 7;</code>
-     * @return The sliceId.
-     */
-    context.ContextOuterClass.SliceId getSliceId();
-    /**
-     * <code>.context.SliceId slice_id = 7;</code>
+     * <pre>
+     * Pending add field to reflect Available Device Protocols
+     * </pre>
+     *
+     * <code>float sampling_rate_s = 3;</code>
+     * @return The samplingRateS.
      */
-    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
+    float getSamplingRateS();
   }
   /**
-   * Protobuf type {@code monitoring.BundleKpiDescriptor}
+   * Protobuf type {@code monitoring.MonitorKpiRequest}
    */
-  public static final class BundleKpiDescriptor extends
+  public static final class MonitorKpiRequest extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.BundleKpiDescriptor)
-      BundleKpiDescriptorOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.MonitorKpiRequest)
+      MonitorKpiRequestOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use BundleKpiDescriptor.newBuilder() to construct.
-    private BundleKpiDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use MonitorKpiRequest.newBuilder() to construct.
+    private MonitorKpiRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private BundleKpiDescriptor() {
-      kpiDescription_ = "";
-      kpiIdList_ = java.util.Collections.emptyList();
-      kpiSampleType_ = 0;
+    private MonitorKpiRequest() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new BundleKpiDescriptor();
+      return new MonitorKpiRequest();
     }
 
     @java.lang.Override
@@ -1642,7 +2141,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private BundleKpiDescriptor(
+    private MonitorKpiRequest(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -1650,7 +2149,6 @@ public final class Monitoring {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -1662,76 +2160,26 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              kpiDescription_ = s;
-              break;
-            }
-            case 18: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                kpiIdList_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              kpiIdList_.add(
-                  input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry));
-              break;
-            }
-            case 24: {
-              int rawValue = input.readEnum();
-
-              kpiSampleType_ = rawValue;
-              break;
-            }
-            case 34: {
-              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
-              if (deviceId_ != null) {
-                subBuilder = deviceId_.toBuilder();
-              }
-              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(deviceId_);
-                deviceId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 42: {
-              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
-              if (endpointId_ != null) {
-                subBuilder = endpointId_.toBuilder();
+              monitoring.Monitoring.KpiId.Builder subBuilder = null;
+              if (kpiId_ != null) {
+                subBuilder = kpiId_.toBuilder();
               }
-              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(endpointId_);
-                endpointId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(kpiId_);
+                kpiId_ = subBuilder.buildPartial();
               }
 
               break;
             }
-            case 50: {
-              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
-              if (serviceId_ != null) {
-                subBuilder = serviceId_.toBuilder();
-              }
-              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(serviceId_);
-                serviceId_ = subBuilder.buildPartial();
-              }
+            case 21: {
 
+              monitoringWindowS_ = input.readFloat();
               break;
             }
-            case 58: {
-              context.ContextOuterClass.SliceId.Builder subBuilder = null;
-              if (sliceId_ != null) {
-                subBuilder = sliceId_.toBuilder();
-              }
-              sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(sliceId_);
-                sliceId_ = subBuilder.buildPartial();
-              }
+            case 29: {
 
+              samplingRateS_ = input.readFloat();
               break;
             }
             default: {
@@ -1749,261 +2197,97 @@ public final class Monitoring {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          kpiIdList_ = java.util.Collections.unmodifiableList(kpiIdList_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_BundleKpiDescriptor_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_BundleKpiDescriptor_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.BundleKpiDescriptor.class, monitoring.Monitoring.BundleKpiDescriptor.Builder.class);
+              monitoring.Monitoring.MonitorKpiRequest.class, monitoring.Monitoring.MonitorKpiRequest.Builder.class);
     }
 
-    public static final int KPI_DESCRIPTION_FIELD_NUMBER = 1;
-    private volatile java.lang.Object kpiDescription_;
-    /**
-     * <code>string kpi_description = 1;</code>
-     * @return The kpiDescription.
-     */
-    @java.lang.Override
-    public java.lang.String getKpiDescription() {
-      java.lang.Object ref = kpiDescription_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        kpiDescription_ = s;
-        return s;
-      }
-    }
+    public static final int KPI_ID_FIELD_NUMBER = 1;
+    private monitoring.Monitoring.KpiId kpiId_;
     /**
-     * <code>string kpi_description = 1;</code>
-     * @return The bytes for kpiDescription.
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getKpiDescriptionBytes() {
-      java.lang.Object ref = kpiDescription_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        kpiDescription_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public boolean hasKpiId() {
+      return kpiId_ != null;
     }
-
-    public static final int KPI_ID_LIST_FIELD_NUMBER = 2;
-    private java.util.List<monitoring.Monitoring.KpiId> kpiIdList_;
     /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return The kpiId.
      */
     @java.lang.Override
-    public java.util.List<monitoring.Monitoring.KpiId> getKpiIdListList() {
-      return kpiIdList_;
+    public monitoring.Monitoring.KpiId getKpiId() {
+      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
     }
     /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
-        getKpiIdListOrBuilderList() {
-      return kpiIdList_;
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+      return getKpiId();
     }
+
+    public static final int MONITORING_WINDOW_S_FIELD_NUMBER = 2;
+    private float monitoringWindowS_;
     /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+     * <code>float monitoring_window_s = 2;</code>
+     * @return The monitoringWindowS.
      */
     @java.lang.Override
-    public int getKpiIdListCount() {
-      return kpiIdList_.size();
+    public float getMonitoringWindowS() {
+      return monitoringWindowS_;
     }
+
+    public static final int SAMPLING_RATE_S_FIELD_NUMBER = 3;
+    private float samplingRateS_;
     /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+     * <pre>
+     * Pending add field to reflect Available Device Protocols
+     * </pre>
+     *
+     * <code>float sampling_rate_s = 3;</code>
+     * @return The samplingRateS.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiId getKpiIdList(int index) {
-      return kpiIdList_.get(index);
+    public float getSamplingRateS() {
+      return samplingRateS_;
     }
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
-     */
+
+    private byte memoizedIsInitialized = -1;
     @java.lang.Override
-    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
-        int index) {
-      return kpiIdList_.get(index);
-    }
-
-    public static final int KPI_SAMPLE_TYPE_FIELD_NUMBER = 3;
-    private int kpiSampleType_;
-    /**
-     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
-     * @return The enum numeric value on the wire for kpiSampleType.
-     */
-    @java.lang.Override public int getKpiSampleTypeValue() {
-      return kpiSampleType_;
-    }
-    /**
-     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
-     * @return The kpiSampleType.
-     */
-    @java.lang.Override public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType() {
-      @SuppressWarnings("deprecation")
-      kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(kpiSampleType_);
-      return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
-    }
-
-    public static final int DEVICE_ID_FIELD_NUMBER = 4;
-    private context.ContextOuterClass.DeviceId deviceId_;
-    /**
-     * <code>.context.DeviceId device_id = 4;</code>
-     * @return Whether the deviceId field is set.
-     */
-    @java.lang.Override
-    public boolean hasDeviceId() {
-      return deviceId_ != null;
-    }
-    /**
-     * <code>.context.DeviceId device_id = 4;</code>
-     * @return The deviceId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceId getDeviceId() {
-      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
-    }
-    /**
-     * <code>.context.DeviceId device_id = 4;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-      return getDeviceId();
-    }
-
-    public static final int ENDPOINT_ID_FIELD_NUMBER = 5;
-    private context.ContextOuterClass.EndPointId endpointId_;
-    /**
-     * <code>.context.EndPointId endpoint_id = 5;</code>
-     * @return Whether the endpointId field is set.
-     */
-    @java.lang.Override
-    public boolean hasEndpointId() {
-      return endpointId_ != null;
-    }
-    /**
-     * <code>.context.EndPointId endpoint_id = 5;</code>
-     * @return The endpointId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EndPointId getEndpointId() {
-      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
-    }
-    /**
-     * <code>.context.EndPointId endpoint_id = 5;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-      return getEndpointId();
-    }
-
-    public static final int SERVICE_ID_FIELD_NUMBER = 6;
-    private context.ContextOuterClass.ServiceId serviceId_;
-    /**
-     * <code>.context.ServiceId service_id = 6;</code>
-     * @return Whether the serviceId field is set.
-     */
-    @java.lang.Override
-    public boolean hasServiceId() {
-      return serviceId_ != null;
-    }
-    /**
-     * <code>.context.ServiceId service_id = 6;</code>
-     * @return The serviceId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceId getServiceId() {
-      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
-    }
-    /**
-     * <code>.context.ServiceId service_id = 6;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-      return getServiceId();
-    }
-
-    public static final int SLICE_ID_FIELD_NUMBER = 7;
-    private context.ContextOuterClass.SliceId sliceId_;
-    /**
-     * <code>.context.SliceId slice_id = 7;</code>
-     * @return Whether the sliceId field is set.
-     */
-    @java.lang.Override
-    public boolean hasSliceId() {
-      return sliceId_ != null;
-    }
-    /**
-     * <code>.context.SliceId slice_id = 7;</code>
-     * @return The sliceId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.SliceId getSliceId() {
-      return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
-    }
-    /**
-     * <code>.context.SliceId slice_id = 7;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
-      return getSliceId();
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
     }
 
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (!getKpiDescriptionBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, kpiDescription_);
-      }
-      for (int i = 0; i < kpiIdList_.size(); i++) {
-        output.writeMessage(2, kpiIdList_.get(i));
-      }
-      if (kpiSampleType_ != kpi_sample_types.KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN.getNumber()) {
-        output.writeEnum(3, kpiSampleType_);
-      }
-      if (deviceId_ != null) {
-        output.writeMessage(4, getDeviceId());
-      }
-      if (endpointId_ != null) {
-        output.writeMessage(5, getEndpointId());
+      if (kpiId_ != null) {
+        output.writeMessage(1, getKpiId());
       }
-      if (serviceId_ != null) {
-        output.writeMessage(6, getServiceId());
+      if (monitoringWindowS_ != 0F) {
+        output.writeFloat(2, monitoringWindowS_);
       }
-      if (sliceId_ != null) {
-        output.writeMessage(7, getSliceId());
+      if (samplingRateS_ != 0F) {
+        output.writeFloat(3, samplingRateS_);
       }
       unknownFields.writeTo(output);
     }
@@ -2014,32 +2298,17 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (!getKpiDescriptionBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, kpiDescription_);
-      }
-      for (int i = 0; i < kpiIdList_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, kpiIdList_.get(i));
-      }
-      if (kpiSampleType_ != kpi_sample_types.KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN.getNumber()) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(3, kpiSampleType_);
-      }
-      if (deviceId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, getDeviceId());
-      }
-      if (endpointId_ != null) {
+      if (kpiId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, getEndpointId());
+          .computeMessageSize(1, getKpiId());
       }
-      if (serviceId_ != null) {
+      if (monitoringWindowS_ != 0F) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, getServiceId());
+          .computeFloatSize(2, monitoringWindowS_);
       }
-      if (sliceId_ != null) {
+      if (samplingRateS_ != 0F) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(7, getSliceId());
+          .computeFloatSize(3, samplingRateS_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -2051,36 +2320,22 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.BundleKpiDescriptor)) {
+      if (!(obj instanceof monitoring.Monitoring.MonitorKpiRequest)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.BundleKpiDescriptor other = (monitoring.Monitoring.BundleKpiDescriptor) obj;
+      monitoring.Monitoring.MonitorKpiRequest other = (monitoring.Monitoring.MonitorKpiRequest) obj;
 
-      if (!getKpiDescription()
-          .equals(other.getKpiDescription())) return false;
-      if (!getKpiIdListList()
-          .equals(other.getKpiIdListList())) return false;
-      if (kpiSampleType_ != other.kpiSampleType_) return false;
-      if (hasDeviceId() != other.hasDeviceId()) return false;
-      if (hasDeviceId()) {
-        if (!getDeviceId()
-            .equals(other.getDeviceId())) return false;
-      }
-      if (hasEndpointId() != other.hasEndpointId()) return false;
-      if (hasEndpointId()) {
-        if (!getEndpointId()
-            .equals(other.getEndpointId())) return false;
-      }
-      if (hasServiceId() != other.hasServiceId()) return false;
-      if (hasServiceId()) {
-        if (!getServiceId()
-            .equals(other.getServiceId())) return false;
-      }
-      if (hasSliceId() != other.hasSliceId()) return false;
-      if (hasSliceId()) {
-        if (!getSliceId()
-            .equals(other.getSliceId())) return false;
+      if (hasKpiId() != other.hasKpiId()) return false;
+      if (hasKpiId()) {
+        if (!getKpiId()
+            .equals(other.getKpiId())) return false;
       }
+      if (java.lang.Float.floatToIntBits(getMonitoringWindowS())
+          != java.lang.Float.floatToIntBits(
+              other.getMonitoringWindowS())) return false;
+      if (java.lang.Float.floatToIntBits(getSamplingRateS())
+          != java.lang.Float.floatToIntBits(
+              other.getSamplingRateS())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -2092,98 +2347,84 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + KPI_DESCRIPTION_FIELD_NUMBER;
-      hash = (53 * hash) + getKpiDescription().hashCode();
-      if (getKpiIdListCount() > 0) {
-        hash = (37 * hash) + KPI_ID_LIST_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiIdListList().hashCode();
-      }
-      hash = (37 * hash) + KPI_SAMPLE_TYPE_FIELD_NUMBER;
-      hash = (53 * hash) + kpiSampleType_;
-      if (hasDeviceId()) {
-        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceId().hashCode();
-      }
-      if (hasEndpointId()) {
-        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getEndpointId().hashCode();
-      }
-      if (hasServiceId()) {
-        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceId().hashCode();
-      }
-      if (hasSliceId()) {
-        hash = (37 * hash) + SLICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceId().hashCode();
+      if (hasKpiId()) {
+        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiId().hashCode();
       }
+      hash = (37 * hash) + MONITORING_WINDOW_S_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getMonitoringWindowS());
+      hash = (37 * hash) + SAMPLING_RATE_S_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getSamplingRateS());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(byte[] data)
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.BundleKpiDescriptor parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.MonitorKpiRequest parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.BundleKpiDescriptor parseDelimitedFrom(
+    public static monitoring.Monitoring.MonitorKpiRequest parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -2196,7 +2437,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.BundleKpiDescriptor prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.MonitorKpiRequest prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -2212,26 +2453,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.BundleKpiDescriptor}
+     * Protobuf type {@code monitoring.MonitorKpiRequest}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.BundleKpiDescriptor)
-        monitoring.Monitoring.BundleKpiDescriptorOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.MonitorKpiRequest)
+        monitoring.Monitoring.MonitorKpiRequestOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_BundleKpiDescriptor_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_BundleKpiDescriptor_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.BundleKpiDescriptor.class, monitoring.Monitoring.BundleKpiDescriptor.Builder.class);
+                monitoring.Monitoring.MonitorKpiRequest.class, monitoring.Monitoring.MonitorKpiRequest.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.BundleKpiDescriptor.newBuilder()
+      // Construct using monitoring.Monitoring.MonitorKpiRequest.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -2244,63 +2485,38 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getKpiIdListFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        kpiDescription_ = "";
-
-        if (kpiIdListBuilder_ == null) {
-          kpiIdList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
         } else {
-          kpiIdListBuilder_.clear();
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
         }
-        kpiSampleType_ = 0;
+        monitoringWindowS_ = 0F;
+
+        samplingRateS_ = 0F;
 
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
-        } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
-        }
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = null;
-        } else {
-          endpointId_ = null;
-          endpointIdBuilder_ = null;
-        }
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
-        } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
-        }
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = null;
-        } else {
-          sliceId_ = null;
-          sliceIdBuilder_ = null;
-        }
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_BundleKpiDescriptor_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.BundleKpiDescriptor getDefaultInstanceForType() {
-        return monitoring.Monitoring.BundleKpiDescriptor.getDefaultInstance();
+      public monitoring.Monitoring.MonitorKpiRequest getDefaultInstanceForType() {
+        return monitoring.Monitoring.MonitorKpiRequest.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.BundleKpiDescriptor build() {
-        monitoring.Monitoring.BundleKpiDescriptor result = buildPartial();
+      public monitoring.Monitoring.MonitorKpiRequest build() {
+        monitoring.Monitoring.MonitorKpiRequest result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -2308,40 +2524,15 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.BundleKpiDescriptor buildPartial() {
-        monitoring.Monitoring.BundleKpiDescriptor result = new monitoring.Monitoring.BundleKpiDescriptor(this);
-        int from_bitField0_ = bitField0_;
-        result.kpiDescription_ = kpiDescription_;
-        if (kpiIdListBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            kpiIdList_ = java.util.Collections.unmodifiableList(kpiIdList_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.kpiIdList_ = kpiIdList_;
-        } else {
-          result.kpiIdList_ = kpiIdListBuilder_.build();
-        }
-        result.kpiSampleType_ = kpiSampleType_;
-        if (deviceIdBuilder_ == null) {
-          result.deviceId_ = deviceId_;
-        } else {
-          result.deviceId_ = deviceIdBuilder_.build();
-        }
-        if (endpointIdBuilder_ == null) {
-          result.endpointId_ = endpointId_;
-        } else {
-          result.endpointId_ = endpointIdBuilder_.build();
-        }
-        if (serviceIdBuilder_ == null) {
-          result.serviceId_ = serviceId_;
-        } else {
-          result.serviceId_ = serviceIdBuilder_.build();
-        }
-        if (sliceIdBuilder_ == null) {
-          result.sliceId_ = sliceId_;
+      public monitoring.Monitoring.MonitorKpiRequest buildPartial() {
+        monitoring.Monitoring.MonitorKpiRequest result = new monitoring.Monitoring.MonitorKpiRequest(this);
+        if (kpiIdBuilder_ == null) {
+          result.kpiId_ = kpiId_;
         } else {
-          result.sliceId_ = sliceIdBuilder_.build();
+          result.kpiId_ = kpiIdBuilder_.build();
         }
+        result.monitoringWindowS_ = monitoringWindowS_;
+        result.samplingRateS_ = samplingRateS_;
         onBuilt();
         return result;
       }
@@ -2380,60 +2571,24 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.BundleKpiDescriptor) {
-          return mergeFrom((monitoring.Monitoring.BundleKpiDescriptor)other);
+        if (other instanceof monitoring.Monitoring.MonitorKpiRequest) {
+          return mergeFrom((monitoring.Monitoring.MonitorKpiRequest)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.BundleKpiDescriptor other) {
-        if (other == monitoring.Monitoring.BundleKpiDescriptor.getDefaultInstance()) return this;
-        if (!other.getKpiDescription().isEmpty()) {
-          kpiDescription_ = other.kpiDescription_;
-          onChanged();
-        }
-        if (kpiIdListBuilder_ == null) {
-          if (!other.kpiIdList_.isEmpty()) {
-            if (kpiIdList_.isEmpty()) {
-              kpiIdList_ = other.kpiIdList_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureKpiIdListIsMutable();
-              kpiIdList_.addAll(other.kpiIdList_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.kpiIdList_.isEmpty()) {
-            if (kpiIdListBuilder_.isEmpty()) {
-              kpiIdListBuilder_.dispose();
-              kpiIdListBuilder_ = null;
-              kpiIdList_ = other.kpiIdList_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              kpiIdListBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getKpiIdListFieldBuilder() : null;
-            } else {
-              kpiIdListBuilder_.addAllMessages(other.kpiIdList_);
-            }
-          }
-        }
-        if (other.kpiSampleType_ != 0) {
-          setKpiSampleTypeValue(other.getKpiSampleTypeValue());
-        }
-        if (other.hasDeviceId()) {
-          mergeDeviceId(other.getDeviceId());
-        }
-        if (other.hasEndpointId()) {
-          mergeEndpointId(other.getEndpointId());
+      public Builder mergeFrom(monitoring.Monitoring.MonitorKpiRequest other) {
+        if (other == monitoring.Monitoring.MonitorKpiRequest.getDefaultInstance()) return this;
+        if (other.hasKpiId()) {
+          mergeKpiId(other.getKpiId());
         }
-        if (other.hasServiceId()) {
-          mergeServiceId(other.getServiceId());
+        if (other.getMonitoringWindowS() != 0F) {
+          setMonitoringWindowS(other.getMonitoringWindowS());
         }
-        if (other.hasSliceId()) {
-          mergeSliceId(other.getSliceId());
+        if (other.getSamplingRateS() != 0F) {
+          setSamplingRateS(other.getSamplingRateS());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -2450,11 +2605,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.BundleKpiDescriptor parsedMessage = null;
+        monitoring.Monitoring.MonitorKpiRequest parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.BundleKpiDescriptor) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.MonitorKpiRequest) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -2463,1055 +2618,377 @@ public final class Monitoring {
         }
         return this;
       }
-      private int bitField0_;
 
-      private java.lang.Object kpiDescription_ = "";
+      private monitoring.Monitoring.KpiId kpiId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
       /**
-       * <code>string kpi_description = 1;</code>
-       * @return The kpiDescription.
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * @return Whether the kpiId field is set.
        */
-      public java.lang.String getKpiDescription() {
-        java.lang.Object ref = kpiDescription_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          kpiDescription_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
+      public boolean hasKpiId() {
+        return kpiIdBuilder_ != null || kpiId_ != null;
       }
       /**
-       * <code>string kpi_description = 1;</code>
-       * @return The bytes for kpiDescription.
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * @return The kpiId.
        */
-      public com.google.protobuf.ByteString
-          getKpiDescriptionBytes() {
-        java.lang.Object ref = kpiDescription_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          kpiDescription_ = b;
-          return b;
+      public monitoring.Monitoring.KpiId getKpiId() {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          return kpiIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>string kpi_description = 1;</code>
-       * @param value The kpiDescription to set.
-       * @return This builder for chaining.
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder setKpiDescription(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        kpiDescription_ = value;
-        onChanged();
+      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiId_ = value;
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(value);
+        }
+
         return this;
       }
       /**
-       * <code>string kpi_description = 1;</code>
-       * @return This builder for chaining.
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder clearKpiDescription() {
-        
-        kpiDescription_ = getDefaultInstance().getKpiDescription();
-        onChanged();
+      public Builder setKpiId(
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(builderForValue.build());
+        }
+
         return this;
       }
       /**
-       * <code>string kpi_description = 1;</code>
-       * @param value The bytes for kpiDescription to set.
-       * @return This builder for chaining.
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder setKpiDescriptionBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        kpiDescription_ = value;
-        onChanged();
-        return this;
-      }
+      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (kpiId_ != null) {
+            kpiId_ =
+              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+          } else {
+            kpiId_ = value;
+          }
+          onChanged();
+        } else {
+          kpiIdBuilder_.mergeFrom(value);
+        }
 
-      private java.util.List<monitoring.Monitoring.KpiId> kpiIdList_ =
-        java.util.Collections.emptyList();
-      private void ensureKpiIdListIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          kpiIdList_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>(kpiIdList_);
-          bitField0_ |= 0x00000001;
-         }
+        return this;
       }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdListBuilder_;
-
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public java.util.List<monitoring.Monitoring.KpiId> getKpiIdListList() {
-        if (kpiIdListBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(kpiIdList_);
+      public Builder clearKpiId() {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+          onChanged();
         } else {
-          return kpiIdListBuilder_.getMessageList();
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public int getKpiIdListCount() {
-        if (kpiIdListBuilder_ == null) {
-          return kpiIdList_.size();
-        } else {
-          return kpiIdListBuilder_.getCount();
-        }
+      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
+        
+        onChanged();
+        return getKpiIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public monitoring.Monitoring.KpiId getKpiIdList(int index) {
-        if (kpiIdListBuilder_ == null) {
-          return kpiIdList_.get(index);
-        } else {
-          return kpiIdListBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
-       */
-      public Builder setKpiIdList(
-          int index, monitoring.Monitoring.KpiId value) {
-        if (kpiIdListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiIdListIsMutable();
-          kpiIdList_.set(index, value);
-          onChanged();
-        } else {
-          kpiIdListBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
-       */
-      public Builder setKpiIdList(
-          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdListBuilder_ == null) {
-          ensureKpiIdListIsMutable();
-          kpiIdList_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          kpiIdListBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
-       */
-      public Builder addKpiIdList(monitoring.Monitoring.KpiId value) {
-        if (kpiIdListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiIdListIsMutable();
-          kpiIdList_.add(value);
-          onChanged();
-        } else {
-          kpiIdListBuilder_.addMessage(value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
-       */
-      public Builder addKpiIdList(
-          int index, monitoring.Monitoring.KpiId value) {
-        if (kpiIdListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiIdListIsMutable();
-          kpiIdList_.add(index, value);
-          onChanged();
-        } else {
-          kpiIdListBuilder_.addMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
-       */
-      public Builder addKpiIdList(
-          monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdListBuilder_ == null) {
-          ensureKpiIdListIsMutable();
-          kpiIdList_.add(builderForValue.build());
-          onChanged();
-        } else {
-          kpiIdListBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
-       */
-      public Builder addKpiIdList(
-          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdListBuilder_ == null) {
-          ensureKpiIdListIsMutable();
-          kpiIdList_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          kpiIdListBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
-       */
-      public Builder addAllKpiIdList(
-          java.lang.Iterable<? extends monitoring.Monitoring.KpiId> values) {
-        if (kpiIdListBuilder_ == null) {
-          ensureKpiIdListIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, kpiIdList_);
-          onChanged();
-        } else {
-          kpiIdListBuilder_.addAllMessages(values);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
-       */
-      public Builder clearKpiIdList() {
-        if (kpiIdListBuilder_ == null) {
-          kpiIdList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          kpiIdListBuilder_.clear();
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
-       */
-      public Builder removeKpiIdList(int index) {
-        if (kpiIdListBuilder_ == null) {
-          ensureKpiIdListIsMutable();
-          kpiIdList_.remove(index);
-          onChanged();
-        } else {
-          kpiIdListBuilder_.remove(index);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder getKpiIdListBuilder(
-          int index) {
-        return getKpiIdListFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
-       */
-      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
-          int index) {
-        if (kpiIdListBuilder_ == null) {
-          return kpiIdList_.get(index);  } else {
-          return kpiIdListBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
-       */
-      public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
-           getKpiIdListOrBuilderList() {
-        if (kpiIdListBuilder_ != null) {
-          return kpiIdListBuilder_.getMessageOrBuilderList();
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+        if (kpiIdBuilder_ != null) {
+          return kpiIdBuilder_.getMessageOrBuilder();
         } else {
-          return java.util.Collections.unmodifiableList(kpiIdList_);
+          return kpiId_ == null ?
+              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
         }
       }
       /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder addKpiIdListBuilder() {
-        return getKpiIdListFieldBuilder().addBuilder(
-            monitoring.Monitoring.KpiId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder addKpiIdListBuilder(
-          int index) {
-        return getKpiIdListFieldBuilder().addBuilder(
-            index, monitoring.Monitoring.KpiId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public java.util.List<monitoring.Monitoring.KpiId.Builder> 
-           getKpiIdListBuilderList() {
-        return getKpiIdListFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
+      private com.google.protobuf.SingleFieldBuilderV3<
           monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
-          getKpiIdListFieldBuilder() {
-        if (kpiIdListBuilder_ == null) {
-          kpiIdListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+          getKpiIdFieldBuilder() {
+        if (kpiIdBuilder_ == null) {
+          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
               monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
-                  kpiIdList_,
-                  ((bitField0_ & 0x00000001) != 0),
+                  getKpiId(),
                   getParentForChildren(),
                   isClean());
-          kpiIdList_ = null;
+          kpiId_ = null;
         }
-        return kpiIdListBuilder_;
+        return kpiIdBuilder_;
       }
 
-      private int kpiSampleType_ = 0;
+      private float monitoringWindowS_ ;
       /**
-       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
-       * @return The enum numeric value on the wire for kpiSampleType.
+       * <code>float monitoring_window_s = 2;</code>
+       * @return The monitoringWindowS.
        */
-      @java.lang.Override public int getKpiSampleTypeValue() {
-        return kpiSampleType_;
+      @java.lang.Override
+      public float getMonitoringWindowS() {
+        return monitoringWindowS_;
       }
       /**
-       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
-       * @param value The enum numeric value on the wire for kpiSampleType to set.
+       * <code>float monitoring_window_s = 2;</code>
+       * @param value The monitoringWindowS to set.
        * @return This builder for chaining.
        */
-      public Builder setKpiSampleTypeValue(int value) {
+      public Builder setMonitoringWindowS(float value) {
         
-        kpiSampleType_ = value;
+        monitoringWindowS_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
-       * @return The kpiSampleType.
+       * <code>float monitoring_window_s = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearMonitoringWindowS() {
+        
+        monitoringWindowS_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private float samplingRateS_ ;
+      /**
+       * <pre>
+       * Pending add field to reflect Available Device Protocols
+       * </pre>
+       *
+       * <code>float sampling_rate_s = 3;</code>
+       * @return The samplingRateS.
        */
       @java.lang.Override
-      public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType() {
-        @SuppressWarnings("deprecation")
-        kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(kpiSampleType_);
-        return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
+      public float getSamplingRateS() {
+        return samplingRateS_;
       }
       /**
-       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
-       * @param value The kpiSampleType to set.
+       * <pre>
+       * Pending add field to reflect Available Device Protocols
+       * </pre>
+       *
+       * <code>float sampling_rate_s = 3;</code>
+       * @param value The samplingRateS to set.
        * @return This builder for chaining.
        */
-      public Builder setKpiSampleType(kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
+      public Builder setSamplingRateS(float value) {
         
-        kpiSampleType_ = value.getNumber();
+        samplingRateS_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
+       * <pre>
+       * Pending add field to reflect Available Device Protocols
+       * </pre>
+       *
+       * <code>float sampling_rate_s = 3;</code>
        * @return This builder for chaining.
        */
-      public Builder clearKpiSampleType() {
+      public Builder clearSamplingRateS() {
         
-        kpiSampleType_ = 0;
+        samplingRateS_ = 0F;
         onChanged();
         return this;
       }
-
-      private context.ContextOuterClass.DeviceId deviceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
-      /**
-       * <code>.context.DeviceId device_id = 4;</code>
-       * @return Whether the deviceId field is set.
-       */
-      public boolean hasDeviceId() {
-        return deviceIdBuilder_ != null || deviceId_ != null;
-      }
-      /**
-       * <code>.context.DeviceId device_id = 4;</code>
-       * @return The deviceId.
-       */
-      public context.ContextOuterClass.DeviceId getDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
-        } else {
-          return deviceIdBuilder_.getMessage();
-        }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
       }
-      /**
-       * <code>.context.DeviceId device_id = 4;</code>
-       */
-      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          deviceId_ = value;
-          onChanged();
-        } else {
-          deviceIdBuilder_.setMessage(value);
-        }
 
-        return this;
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
       }
-      /**
-       * <code>.context.DeviceId device_id = 4;</code>
-       */
-      public Builder setDeviceId(
-          context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = builderForValue.build();
-          onChanged();
-        } else {
-          deviceIdBuilder_.setMessage(builderForValue.build());
-        }
 
-        return this;
-      }
-      /**
-       * <code>.context.DeviceId device_id = 4;</code>
-       */
-      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
-          if (deviceId_ != null) {
-            deviceId_ =
-              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
-          } else {
-            deviceId_ = value;
-          }
-          onChanged();
-        } else {
-          deviceIdBuilder_.mergeFrom(value);
-        }
 
-        return this;
-      }
-      /**
-       * <code>.context.DeviceId device_id = 4;</code>
-       */
-      public Builder clearDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
-          onChanged();
-        } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
-        }
+      // @@protoc_insertion_point(builder_scope:monitoring.MonitorKpiRequest)
+    }
 
-        return this;
-      }
-      /**
-       * <code>.context.DeviceId device_id = 4;</code>
-       */
-      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
-        
-        onChanged();
-        return getDeviceIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.DeviceId device_id = 4;</code>
-       */
-      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-        if (deviceIdBuilder_ != null) {
-          return deviceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return deviceId_ == null ?
-              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
-        }
-      }
-      /**
-       * <code>.context.DeviceId device_id = 4;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
-          getDeviceIdFieldBuilder() {
-        if (deviceIdBuilder_ == null) {
-          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
-                  getDeviceId(),
-                  getParentForChildren(),
-                  isClean());
-          deviceId_ = null;
-        }
-        return deviceIdBuilder_;
-      }
+    // @@protoc_insertion_point(class_scope:monitoring.MonitorKpiRequest)
+    private static final monitoring.Monitoring.MonitorKpiRequest DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.MonitorKpiRequest();
+    }
 
-      private context.ContextOuterClass.EndPointId endpointId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
-      /**
-       * <code>.context.EndPointId endpoint_id = 5;</code>
-       * @return Whether the endpointId field is set.
-       */
-      public boolean hasEndpointId() {
-        return endpointIdBuilder_ != null || endpointId_ != null;
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 5;</code>
-       * @return The endpointId.
-       */
-      public context.ContextOuterClass.EndPointId getEndpointId() {
-        if (endpointIdBuilder_ == null) {
-          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
-        } else {
-          return endpointIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 5;</code>
-       */
-      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
-        if (endpointIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          endpointId_ = value;
-          onChanged();
-        } else {
-          endpointIdBuilder_.setMessage(value);
-        }
+    public static monitoring.Monitoring.MonitorKpiRequest getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
 
-        return this;
+    private static final com.google.protobuf.Parser<MonitorKpiRequest>
+        PARSER = new com.google.protobuf.AbstractParser<MonitorKpiRequest>() {
+      @java.lang.Override
+      public MonitorKpiRequest parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new MonitorKpiRequest(input, extensionRegistry);
       }
-      /**
-       * <code>.context.EndPointId endpoint_id = 5;</code>
-       */
-      public Builder setEndpointId(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = builderForValue.build();
-          onChanged();
-        } else {
-          endpointIdBuilder_.setMessage(builderForValue.build());
-        }
+    };
 
-        return this;
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 5;</code>
-       */
-      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
-        if (endpointIdBuilder_ == null) {
-          if (endpointId_ != null) {
-            endpointId_ =
-              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
-          } else {
-            endpointId_ = value;
-          }
-          onChanged();
-        } else {
-          endpointIdBuilder_.mergeFrom(value);
-        }
+    public static com.google.protobuf.Parser<MonitorKpiRequest> parser() {
+      return PARSER;
+    }
 
-        return this;
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 5;</code>
-       */
-      public Builder clearEndpointId() {
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = null;
-          onChanged();
-        } else {
-          endpointId_ = null;
-          endpointIdBuilder_ = null;
-        }
+    @java.lang.Override
+    public com.google.protobuf.Parser<MonitorKpiRequest> getParserForType() {
+      return PARSER;
+    }
 
-        return this;
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 5;</code>
-       */
-      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
-        
-        onChanged();
-        return getEndpointIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 5;</code>
-       */
-      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-        if (endpointIdBuilder_ != null) {
-          return endpointIdBuilder_.getMessageOrBuilder();
-        } else {
-          return endpointId_ == null ?
-              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
-        }
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 5;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getEndpointIdFieldBuilder() {
-        if (endpointIdBuilder_ == null) {
-          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  getEndpointId(),
-                  getParentForChildren(),
-                  isClean());
-          endpointId_ = null;
-        }
-        return endpointIdBuilder_;
-      }
-
-      private context.ContextOuterClass.ServiceId serviceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
-      /**
-       * <code>.context.ServiceId service_id = 6;</code>
-       * @return Whether the serviceId field is set.
-       */
-      public boolean hasServiceId() {
-        return serviceIdBuilder_ != null || serviceId_ != null;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 6;</code>
-       * @return The serviceId.
-       */
-      public context.ContextOuterClass.ServiceId getServiceId() {
-        if (serviceIdBuilder_ == null) {
-          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
-        } else {
-          return serviceIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.ServiceId service_id = 6;</code>
-       */
-      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          serviceId_ = value;
-          onChanged();
-        } else {
-          serviceIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 6;</code>
-       */
-      public Builder setServiceId(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = builderForValue.build();
-          onChanged();
-        } else {
-          serviceIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 6;</code>
-       */
-      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
-          if (serviceId_ != null) {
-            serviceId_ =
-              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
-          } else {
-            serviceId_ = value;
-          }
-          onChanged();
-        } else {
-          serviceIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 6;</code>
-       */
-      public Builder clearServiceId() {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
-          onChanged();
-        } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 6;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
-        
-        onChanged();
-        return getServiceIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.ServiceId service_id = 6;</code>
-       */
-      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-        if (serviceIdBuilder_ != null) {
-          return serviceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return serviceId_ == null ?
-              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
-        }
-      }
-      /**
-       * <code>.context.ServiceId service_id = 6;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getServiceIdFieldBuilder() {
-        if (serviceIdBuilder_ == null) {
-          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  getServiceId(),
-                  getParentForChildren(),
-                  isClean());
-          serviceId_ = null;
-        }
-        return serviceIdBuilder_;
-      }
-
-      private context.ContextOuterClass.SliceId sliceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
-      /**
-       * <code>.context.SliceId slice_id = 7;</code>
-       * @return Whether the sliceId field is set.
-       */
-      public boolean hasSliceId() {
-        return sliceIdBuilder_ != null || sliceId_ != null;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 7;</code>
-       * @return The sliceId.
-       */
-      public context.ContextOuterClass.SliceId getSliceId() {
-        if (sliceIdBuilder_ == null) {
-          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
-        } else {
-          return sliceIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.SliceId slice_id = 7;</code>
-       */
-      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
-        if (sliceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          sliceId_ = value;
-          onChanged();
-        } else {
-          sliceIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 7;</code>
-       */
-      public Builder setSliceId(
-          context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = builderForValue.build();
-          onChanged();
-        } else {
-          sliceIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 7;</code>
-       */
-      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
-        if (sliceIdBuilder_ == null) {
-          if (sliceId_ != null) {
-            sliceId_ =
-              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
-          } else {
-            sliceId_ = value;
-          }
-          onChanged();
-        } else {
-          sliceIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 7;</code>
-       */
-      public Builder clearSliceId() {
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = null;
-          onChanged();
-        } else {
-          sliceId_ = null;
-          sliceIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 7;</code>
-       */
-      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
-        
-        onChanged();
-        return getSliceIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.SliceId slice_id = 7;</code>
-       */
-      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
-        if (sliceIdBuilder_ != null) {
-          return sliceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return sliceId_ == null ?
-              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
-        }
-      }
-      /**
-       * <code>.context.SliceId slice_id = 7;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
-          getSliceIdFieldBuilder() {
-        if (sliceIdBuilder_ == null) {
-          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
-                  getSliceId(),
-                  getParentForChildren(),
-                  isClean());
-          sliceId_ = null;
-        }
-        return sliceIdBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:monitoring.BundleKpiDescriptor)
-    }
-
-    // @@protoc_insertion_point(class_scope:monitoring.BundleKpiDescriptor)
-    private static final monitoring.Monitoring.BundleKpiDescriptor DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.BundleKpiDescriptor();
-    }
-
-    public static monitoring.Monitoring.BundleKpiDescriptor getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<BundleKpiDescriptor>
-        PARSER = new com.google.protobuf.AbstractParser<BundleKpiDescriptor>() {
-      @java.lang.Override
-      public BundleKpiDescriptor parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new BundleKpiDescriptor(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<BundleKpiDescriptor> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<BundleKpiDescriptor> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public monitoring.Monitoring.BundleKpiDescriptor getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
+    @java.lang.Override
+    public monitoring.Monitoring.MonitorKpiRequest getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
 
   }
 
-  public interface EditedKpiDescriptorOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.EditedKpiDescriptor)
+  public interface KpiQueryOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiQuery)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return Whether the kpiId field is set.
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
      */
-    boolean hasKpiId();
+    java.util.List<monitoring.Monitoring.KpiId> 
+        getKpiIdList();
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return The kpiId.
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
      */
-    monitoring.Monitoring.KpiId getKpiId();
-    /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     */
-    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
-
-    /**
-     * <code>string kpi_description = 2;</code>
-     * @return The kpiDescription.
-     */
-    java.lang.String getKpiDescription();
-    /**
-     * <code>string kpi_description = 2;</code>
-     * @return The bytes for kpiDescription.
-     */
-    com.google.protobuf.ByteString
-        getKpiDescriptionBytes();
-
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-     */
-    java.util.List<monitoring.Monitoring.KpiId> 
-        getKpiIdListList();
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-     */
-    monitoring.Monitoring.KpiId getKpiIdList(int index);
+    monitoring.Monitoring.KpiId getKpiId(int index);
     /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
      */
-    int getKpiIdListCount();
+    int getKpiIdCount();
     /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
      */
     java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
-        getKpiIdListOrBuilderList();
+        getKpiIdOrBuilderList();
     /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
      */
-    monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
         int index);
 
     /**
-     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
-     * @return The enum numeric value on the wire for kpiSampleType.
-     */
-    int getKpiSampleTypeValue();
-    /**
-     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
-     * @return The kpiSampleType.
+     * <code>float monitoring_window_s = 2;</code>
+     * @return The monitoringWindowS.
      */
-    kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType();
+    float getMonitoringWindowS();
 
     /**
-     * <code>.context.DeviceId device_id = 5;</code>
-     * @return Whether the deviceId field is set.
-     */
-    boolean hasDeviceId();
-    /**
-     * <code>.context.DeviceId device_id = 5;</code>
-     * @return The deviceId.
-     */
-    context.ContextOuterClass.DeviceId getDeviceId();
-    /**
-     * <code>.context.DeviceId device_id = 5;</code>
+     * <code>float sampling_rate_s = 3;</code>
+     * @return The samplingRateS.
      */
-    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
+    float getSamplingRateS();
 
     /**
-     * <code>.context.EndPointId endpoint_id = 6;</code>
-     * @return Whether the endpointId field is set.
-     */
-    boolean hasEndpointId();
-    /**
-     * <code>.context.EndPointId endpoint_id = 6;</code>
-     * @return The endpointId.
-     */
-    context.ContextOuterClass.EndPointId getEndpointId();
-    /**
-     * <code>.context.EndPointId endpoint_id = 6;</code>
+     * <pre>
+     * used when you want something like "get the last N many samples
+     * </pre>
+     *
+     * <code>uint32 last_n_samples = 4;</code>
+     * @return The lastNSamples.
      */
-    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
+    int getLastNSamples();
 
     /**
-     * <code>.context.ServiceId service_id = 7;</code>
-     * @return Whether the serviceId field is set.
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>.context.Timestamp start_timestamp = 5;</code>
+     * @return Whether the startTimestamp field is set.
      */
-    boolean hasServiceId();
+    boolean hasStartTimestamp();
     /**
-     * <code>.context.ServiceId service_id = 7;</code>
-     * @return The serviceId.
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>.context.Timestamp start_timestamp = 5;</code>
+     * @return The startTimestamp.
      */
-    context.ContextOuterClass.ServiceId getServiceId();
+    context.ContextOuterClass.Timestamp getStartTimestamp();
     /**
-     * <code>.context.ServiceId service_id = 7;</code>
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>.context.Timestamp start_timestamp = 5;</code>
      */
-    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
+    context.ContextOuterClass.TimestampOrBuilder getStartTimestampOrBuilder();
 
     /**
-     * <code>.context.SliceId slice_id = 8;</code>
-     * @return Whether the sliceId field is set.
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>.context.Timestamp end_timestamp = 6;</code>
+     * @return Whether the endTimestamp field is set.
      */
-    boolean hasSliceId();
+    boolean hasEndTimestamp();
     /**
-     * <code>.context.SliceId slice_id = 8;</code>
-     * @return The sliceId.
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>.context.Timestamp end_timestamp = 6;</code>
+     * @return The endTimestamp.
      */
-    context.ContextOuterClass.SliceId getSliceId();
+    context.ContextOuterClass.Timestamp getEndTimestamp();
     /**
-     * <code>.context.SliceId slice_id = 8;</code>
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>.context.Timestamp end_timestamp = 6;</code>
      */
-    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
+    context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder();
   }
   /**
-   * Protobuf type {@code monitoring.EditedKpiDescriptor}
+   * Protobuf type {@code monitoring.KpiQuery}
    */
-  public static final class EditedKpiDescriptor extends
+  public static final class KpiQuery extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.EditedKpiDescriptor)
-      EditedKpiDescriptorOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.KpiQuery)
+      KpiQueryOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use EditedKpiDescriptor.newBuilder() to construct.
-    private EditedKpiDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use KpiQuery.newBuilder() to construct.
+    private KpiQuery(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private EditedKpiDescriptor() {
-      kpiDescription_ = "";
-      kpiIdList_ = java.util.Collections.emptyList();
-      kpiSampleType_ = 0;
+    private KpiQuery() {
+      kpiId_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new EditedKpiDescriptor();
+      return new KpiQuery();
     }
 
     @java.lang.Override
@@ -3519,7 +2996,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private EditedKpiDescriptor(
+    private KpiQuery(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -3539,87 +3016,51 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              monitoring.Monitoring.KpiId.Builder subBuilder = null;
-              if (kpiId_ != null) {
-                subBuilder = kpiId_.toBuilder();
-              }
-              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(kpiId_);
-                kpiId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              kpiDescription_ = s;
-              break;
-            }
-            case 26: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                kpiIdList_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>();
+                kpiId_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              kpiIdList_.add(
+              kpiId_.add(
                   input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry));
               break;
             }
-            case 32: {
-              int rawValue = input.readEnum();
+            case 21: {
 
-              kpiSampleType_ = rawValue;
+              monitoringWindowS_ = input.readFloat();
               break;
             }
-            case 42: {
-              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
-              if (deviceId_ != null) {
-                subBuilder = deviceId_.toBuilder();
-              }
-              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(deviceId_);
-                deviceId_ = subBuilder.buildPartial();
-              }
+            case 29: {
 
+              samplingRateS_ = input.readFloat();
               break;
             }
-            case 50: {
-              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
-              if (endpointId_ != null) {
-                subBuilder = endpointId_.toBuilder();
-              }
-              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(endpointId_);
-                endpointId_ = subBuilder.buildPartial();
-              }
+            case 32: {
 
+              lastNSamples_ = input.readUInt32();
               break;
             }
-            case 58: {
-              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
-              if (serviceId_ != null) {
-                subBuilder = serviceId_.toBuilder();
+            case 42: {
+              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
+              if (startTimestamp_ != null) {
+                subBuilder = startTimestamp_.toBuilder();
               }
-              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
+              startTimestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(serviceId_);
-                serviceId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(startTimestamp_);
+                startTimestamp_ = subBuilder.buildPartial();
               }
 
               break;
             }
-            case 66: {
-              context.ContextOuterClass.SliceId.Builder subBuilder = null;
-              if (sliceId_ != null) {
-                subBuilder = sliceId_.toBuilder();
+            case 50: {
+              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
+              if (endTimestamp_ != null) {
+                subBuilder = endTimestamp_.toBuilder();
               }
-              sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
+              endTimestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(sliceId_);
-                sliceId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(endTimestamp_);
+                endTimestamp_ = subBuilder.buildPartial();
               }
 
               break;
@@ -3640,7 +3081,7 @@ public final class Monitoring {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          kpiIdList_ = java.util.Collections.unmodifiableList(kpiIdList_);
+          kpiId_ = java.util.Collections.unmodifiableList(kpiId_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -3648,242 +3089,168 @@ public final class Monitoring {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_EditedKpiDescriptor_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_KpiQuery_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_EditedKpiDescriptor_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_KpiQuery_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.EditedKpiDescriptor.class, monitoring.Monitoring.EditedKpiDescriptor.Builder.class);
+              monitoring.Monitoring.KpiQuery.class, monitoring.Monitoring.KpiQuery.Builder.class);
     }
 
     public static final int KPI_ID_FIELD_NUMBER = 1;
-    private monitoring.Monitoring.KpiId kpiId_;
+    private java.util.List<monitoring.Monitoring.KpiId> kpiId_;
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return Whether the kpiId field is set.
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
      */
     @java.lang.Override
-    public boolean hasKpiId() {
-      return kpiId_ != null;
+    public java.util.List<monitoring.Monitoring.KpiId> getKpiIdList() {
+      return kpiId_;
     }
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return The kpiId.
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiId getKpiId() {
-      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+    public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+        getKpiIdOrBuilderList() {
+      return kpiId_;
     }
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-      return getKpiId();
+    public int getKpiIdCount() {
+      return kpiId_.size();
     }
-
-    public static final int KPI_DESCRIPTION_FIELD_NUMBER = 2;
-    private volatile java.lang.Object kpiDescription_;
     /**
-     * <code>string kpi_description = 2;</code>
-     * @return The kpiDescription.
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
      */
     @java.lang.Override
-    public java.lang.String getKpiDescription() {
-      java.lang.Object ref = kpiDescription_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        kpiDescription_ = s;
-        return s;
-      }
+    public monitoring.Monitoring.KpiId getKpiId(int index) {
+      return kpiId_.get(index);
     }
     /**
-     * <code>string kpi_description = 2;</code>
-     * @return The bytes for kpiDescription.
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getKpiDescriptionBytes() {
-      java.lang.Object ref = kpiDescription_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        kpiDescription_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-
-    public static final int KPI_ID_LIST_FIELD_NUMBER = 3;
-    private java.util.List<monitoring.Monitoring.KpiId> kpiIdList_;
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<monitoring.Monitoring.KpiId> getKpiIdListList() {
-      return kpiIdList_;
-    }
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
-        getKpiIdListOrBuilderList() {
-      return kpiIdList_;
-    }
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-     */
-    @java.lang.Override
-    public int getKpiIdListCount() {
-      return kpiIdList_.size();
-    }
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiId getKpiIdList(int index) {
-      return kpiIdList_.get(index);
-    }
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
         int index) {
-      return kpiIdList_.get(index);
-    }
-
-    public static final int KPI_SAMPLE_TYPE_FIELD_NUMBER = 4;
-    private int kpiSampleType_;
-    /**
-     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
-     * @return The enum numeric value on the wire for kpiSampleType.
-     */
-    @java.lang.Override public int getKpiSampleTypeValue() {
-      return kpiSampleType_;
-    }
-    /**
-     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
-     * @return The kpiSampleType.
-     */
-    @java.lang.Override public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType() {
-      @SuppressWarnings("deprecation")
-      kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(kpiSampleType_);
-      return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
+      return kpiId_.get(index);
     }
 
-    public static final int DEVICE_ID_FIELD_NUMBER = 5;
-    private context.ContextOuterClass.DeviceId deviceId_;
-    /**
-     * <code>.context.DeviceId device_id = 5;</code>
-     * @return Whether the deviceId field is set.
-     */
-    @java.lang.Override
-    public boolean hasDeviceId() {
-      return deviceId_ != null;
-    }
-    /**
-     * <code>.context.DeviceId device_id = 5;</code>
-     * @return The deviceId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceId getDeviceId() {
-      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
-    }
+    public static final int MONITORING_WINDOW_S_FIELD_NUMBER = 2;
+    private float monitoringWindowS_;
     /**
-     * <code>.context.DeviceId device_id = 5;</code>
+     * <code>float monitoring_window_s = 2;</code>
+     * @return The monitoringWindowS.
      */
     @java.lang.Override
-    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-      return getDeviceId();
+    public float getMonitoringWindowS() {
+      return monitoringWindowS_;
     }
 
-    public static final int ENDPOINT_ID_FIELD_NUMBER = 6;
-    private context.ContextOuterClass.EndPointId endpointId_;
-    /**
-     * <code>.context.EndPointId endpoint_id = 6;</code>
-     * @return Whether the endpointId field is set.
-     */
-    @java.lang.Override
-    public boolean hasEndpointId() {
-      return endpointId_ != null;
-    }
+    public static final int SAMPLING_RATE_S_FIELD_NUMBER = 3;
+    private float samplingRateS_;
     /**
-     * <code>.context.EndPointId endpoint_id = 6;</code>
-     * @return The endpointId.
+     * <code>float sampling_rate_s = 3;</code>
+     * @return The samplingRateS.
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPointId getEndpointId() {
-      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+    public float getSamplingRateS() {
+      return samplingRateS_;
     }
+
+    public static final int LAST_N_SAMPLES_FIELD_NUMBER = 4;
+    private int lastNSamples_;
     /**
-     * <code>.context.EndPointId endpoint_id = 6;</code>
+     * <pre>
+     * used when you want something like "get the last N many samples
+     * </pre>
+     *
+     * <code>uint32 last_n_samples = 4;</code>
+     * @return The lastNSamples.
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-      return getEndpointId();
+    public int getLastNSamples() {
+      return lastNSamples_;
     }
 
-    public static final int SERVICE_ID_FIELD_NUMBER = 7;
-    private context.ContextOuterClass.ServiceId serviceId_;
+    public static final int START_TIMESTAMP_FIELD_NUMBER = 5;
+    private context.ContextOuterClass.Timestamp startTimestamp_;
     /**
-     * <code>.context.ServiceId service_id = 7;</code>
-     * @return Whether the serviceId field is set.
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>.context.Timestamp start_timestamp = 5;</code>
+     * @return Whether the startTimestamp field is set.
      */
     @java.lang.Override
-    public boolean hasServiceId() {
-      return serviceId_ != null;
+    public boolean hasStartTimestamp() {
+      return startTimestamp_ != null;
     }
     /**
-     * <code>.context.ServiceId service_id = 7;</code>
-     * @return The serviceId.
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>.context.Timestamp start_timestamp = 5;</code>
+     * @return The startTimestamp.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceId getServiceId() {
-      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+    public context.ContextOuterClass.Timestamp getStartTimestamp() {
+      return startTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : startTimestamp_;
     }
     /**
-     * <code>.context.ServiceId service_id = 7;</code>
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>.context.Timestamp start_timestamp = 5;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-      return getServiceId();
+    public context.ContextOuterClass.TimestampOrBuilder getStartTimestampOrBuilder() {
+      return getStartTimestamp();
     }
 
-    public static final int SLICE_ID_FIELD_NUMBER = 8;
-    private context.ContextOuterClass.SliceId sliceId_;
+    public static final int END_TIMESTAMP_FIELD_NUMBER = 6;
+    private context.ContextOuterClass.Timestamp endTimestamp_;
     /**
-     * <code>.context.SliceId slice_id = 8;</code>
-     * @return Whether the sliceId field is set.
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>.context.Timestamp end_timestamp = 6;</code>
+     * @return Whether the endTimestamp field is set.
      */
     @java.lang.Override
-    public boolean hasSliceId() {
-      return sliceId_ != null;
+    public boolean hasEndTimestamp() {
+      return endTimestamp_ != null;
     }
     /**
-     * <code>.context.SliceId slice_id = 8;</code>
-     * @return The sliceId.
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>.context.Timestamp end_timestamp = 6;</code>
+     * @return The endTimestamp.
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceId getSliceId() {
-      return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+    public context.ContextOuterClass.Timestamp getEndTimestamp() {
+      return endTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_;
     }
     /**
-     * <code>.context.SliceId slice_id = 8;</code>
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>.context.Timestamp end_timestamp = 6;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
-      return getSliceId();
+    public context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder() {
+      return getEndTimestamp();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -3894,3670 +3261,1729 @@ public final class Monitoring {
       if (isInitialized == 0) return false;
 
       memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (kpiId_ != null) {
-        output.writeMessage(1, getKpiId());
-      }
-      if (!getKpiDescriptionBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, kpiDescription_);
-      }
-      for (int i = 0; i < kpiIdList_.size(); i++) {
-        output.writeMessage(3, kpiIdList_.get(i));
-      }
-      if (kpiSampleType_ != kpi_sample_types.KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN.getNumber()) {
-        output.writeEnum(4, kpiSampleType_);
-      }
-      if (deviceId_ != null) {
-        output.writeMessage(5, getDeviceId());
-      }
-      if (endpointId_ != null) {
-        output.writeMessage(6, getEndpointId());
-      }
-      if (serviceId_ != null) {
-        output.writeMessage(7, getServiceId());
-      }
-      if (sliceId_ != null) {
-        output.writeMessage(8, getSliceId());
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (kpiId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getKpiId());
-      }
-      if (!getKpiDescriptionBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, kpiDescription_);
-      }
-      for (int i = 0; i < kpiIdList_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, kpiIdList_.get(i));
-      }
-      if (kpiSampleType_ != kpi_sample_types.KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN.getNumber()) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(4, kpiSampleType_);
-      }
-      if (deviceId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, getDeviceId());
-      }
-      if (endpointId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, getEndpointId());
-      }
-      if (serviceId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(7, getServiceId());
-      }
-      if (sliceId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(8, getSliceId());
-      }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof monitoring.Monitoring.EditedKpiDescriptor)) {
-        return super.equals(obj);
-      }
-      monitoring.Monitoring.EditedKpiDescriptor other = (monitoring.Monitoring.EditedKpiDescriptor) obj;
-
-      if (hasKpiId() != other.hasKpiId()) return false;
-      if (hasKpiId()) {
-        if (!getKpiId()
-            .equals(other.getKpiId())) return false;
-      }
-      if (!getKpiDescription()
-          .equals(other.getKpiDescription())) return false;
-      if (!getKpiIdListList()
-          .equals(other.getKpiIdListList())) return false;
-      if (kpiSampleType_ != other.kpiSampleType_) return false;
-      if (hasDeviceId() != other.hasDeviceId()) return false;
-      if (hasDeviceId()) {
-        if (!getDeviceId()
-            .equals(other.getDeviceId())) return false;
-      }
-      if (hasEndpointId() != other.hasEndpointId()) return false;
-      if (hasEndpointId()) {
-        if (!getEndpointId()
-            .equals(other.getEndpointId())) return false;
-      }
-      if (hasServiceId() != other.hasServiceId()) return false;
-      if (hasServiceId()) {
-        if (!getServiceId()
-            .equals(other.getServiceId())) return false;
-      }
-      if (hasSliceId() != other.hasSliceId()) return false;
-      if (hasSliceId()) {
-        if (!getSliceId()
-            .equals(other.getSliceId())) return false;
-      }
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasKpiId()) {
-        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiId().hashCode();
-      }
-      hash = (37 * hash) + KPI_DESCRIPTION_FIELD_NUMBER;
-      hash = (53 * hash) + getKpiDescription().hashCode();
-      if (getKpiIdListCount() > 0) {
-        hash = (37 * hash) + KPI_ID_LIST_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiIdListList().hashCode();
-      }
-      hash = (37 * hash) + KPI_SAMPLE_TYPE_FIELD_NUMBER;
-      hash = (53 * hash) + kpiSampleType_;
-      if (hasDeviceId()) {
-        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceId().hashCode();
-      }
-      if (hasEndpointId()) {
-        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getEndpointId().hashCode();
-      }
-      if (hasServiceId()) {
-        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceId().hashCode();
-      }
-      if (hasSliceId()) {
-        hash = (37 * hash) + SLICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceId().hashCode();
-      }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static monitoring.Monitoring.EditedKpiDescriptor parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static monitoring.Monitoring.EditedKpiDescriptor parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(monitoring.Monitoring.EditedKpiDescriptor prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code monitoring.EditedKpiDescriptor}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.EditedKpiDescriptor)
-        monitoring.Monitoring.EditedKpiDescriptorOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_EditedKpiDescriptor_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_EditedKpiDescriptor_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.EditedKpiDescriptor.class, monitoring.Monitoring.EditedKpiDescriptor.Builder.class);
-      }
-
-      // Construct using monitoring.Monitoring.EditedKpiDescriptor.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-          getKpiIdListFieldBuilder();
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
-        } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
-        }
-        kpiDescription_ = "";
-
-        if (kpiIdListBuilder_ == null) {
-          kpiIdList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          kpiIdListBuilder_.clear();
-        }
-        kpiSampleType_ = 0;
-
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
-        } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
-        }
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = null;
-        } else {
-          endpointId_ = null;
-          endpointIdBuilder_ = null;
-        }
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
-        } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
-        }
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = null;
-        } else {
-          sliceId_ = null;
-          sliceIdBuilder_ = null;
-        }
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_EditedKpiDescriptor_descriptor;
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.EditedKpiDescriptor getDefaultInstanceForType() {
-        return monitoring.Monitoring.EditedKpiDescriptor.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.EditedKpiDescriptor build() {
-        monitoring.Monitoring.EditedKpiDescriptor result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.EditedKpiDescriptor buildPartial() {
-        monitoring.Monitoring.EditedKpiDescriptor result = new monitoring.Monitoring.EditedKpiDescriptor(this);
-        int from_bitField0_ = bitField0_;
-        if (kpiIdBuilder_ == null) {
-          result.kpiId_ = kpiId_;
-        } else {
-          result.kpiId_ = kpiIdBuilder_.build();
-        }
-        result.kpiDescription_ = kpiDescription_;
-        if (kpiIdListBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            kpiIdList_ = java.util.Collections.unmodifiableList(kpiIdList_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.kpiIdList_ = kpiIdList_;
-        } else {
-          result.kpiIdList_ = kpiIdListBuilder_.build();
-        }
-        result.kpiSampleType_ = kpiSampleType_;
-        if (deviceIdBuilder_ == null) {
-          result.deviceId_ = deviceId_;
-        } else {
-          result.deviceId_ = deviceIdBuilder_.build();
-        }
-        if (endpointIdBuilder_ == null) {
-          result.endpointId_ = endpointId_;
-        } else {
-          result.endpointId_ = endpointIdBuilder_.build();
-        }
-        if (serviceIdBuilder_ == null) {
-          result.serviceId_ = serviceId_;
-        } else {
-          result.serviceId_ = serviceIdBuilder_.build();
-        }
-        if (sliceIdBuilder_ == null) {
-          result.sliceId_ = sliceId_;
-        } else {
-          result.sliceId_ = sliceIdBuilder_.build();
-        }
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.EditedKpiDescriptor) {
-          return mergeFrom((monitoring.Monitoring.EditedKpiDescriptor)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(monitoring.Monitoring.EditedKpiDescriptor other) {
-        if (other == monitoring.Monitoring.EditedKpiDescriptor.getDefaultInstance()) return this;
-        if (other.hasKpiId()) {
-          mergeKpiId(other.getKpiId());
-        }
-        if (!other.getKpiDescription().isEmpty()) {
-          kpiDescription_ = other.kpiDescription_;
-          onChanged();
-        }
-        if (kpiIdListBuilder_ == null) {
-          if (!other.kpiIdList_.isEmpty()) {
-            if (kpiIdList_.isEmpty()) {
-              kpiIdList_ = other.kpiIdList_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureKpiIdListIsMutable();
-              kpiIdList_.addAll(other.kpiIdList_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.kpiIdList_.isEmpty()) {
-            if (kpiIdListBuilder_.isEmpty()) {
-              kpiIdListBuilder_.dispose();
-              kpiIdListBuilder_ = null;
-              kpiIdList_ = other.kpiIdList_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              kpiIdListBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getKpiIdListFieldBuilder() : null;
-            } else {
-              kpiIdListBuilder_.addAllMessages(other.kpiIdList_);
-            }
-          }
-        }
-        if (other.kpiSampleType_ != 0) {
-          setKpiSampleTypeValue(other.getKpiSampleTypeValue());
-        }
-        if (other.hasDeviceId()) {
-          mergeDeviceId(other.getDeviceId());
-        }
-        if (other.hasEndpointId()) {
-          mergeEndpointId(other.getEndpointId());
-        }
-        if (other.hasServiceId()) {
-          mergeServiceId(other.getServiceId());
-        }
-        if (other.hasSliceId()) {
-          mergeSliceId(other.getSliceId());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        monitoring.Monitoring.EditedKpiDescriptor parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.EditedKpiDescriptor) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private monitoring.Monitoring.KpiId kpiId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       * @return Whether the kpiId field is set.
-       */
-      public boolean hasKpiId() {
-        return kpiIdBuilder_ != null || kpiId_ != null;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       * @return The kpiId.
-       */
-      public monitoring.Monitoring.KpiId getKpiId() {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
-        } else {
-          return kpiIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          kpiId_ = value;
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder setKpiId(
-          monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = builderForValue.build();
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (kpiId_ != null) {
-            kpiId_ =
-              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
-          } else {
-            kpiId_ = value;
-          }
-          onChanged();
-        } else {
-          kpiIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder clearKpiId() {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
-          onChanged();
-        } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
-        
-        onChanged();
-        return getKpiIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-        if (kpiIdBuilder_ != null) {
-          return kpiIdBuilder_.getMessageOrBuilder();
-        } else {
-          return kpiId_ == null ?
-              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
-        }
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
-          getKpiIdFieldBuilder() {
-        if (kpiIdBuilder_ == null) {
-          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
-                  getKpiId(),
-                  getParentForChildren(),
-                  isClean());
-          kpiId_ = null;
-        }
-        return kpiIdBuilder_;
-      }
-
-      private java.lang.Object kpiDescription_ = "";
-      /**
-       * <code>string kpi_description = 2;</code>
-       * @return The kpiDescription.
-       */
-      public java.lang.String getKpiDescription() {
-        java.lang.Object ref = kpiDescription_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          kpiDescription_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>string kpi_description = 2;</code>
-       * @return The bytes for kpiDescription.
-       */
-      public com.google.protobuf.ByteString
-          getKpiDescriptionBytes() {
-        java.lang.Object ref = kpiDescription_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          kpiDescription_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       * <code>string kpi_description = 2;</code>
-       * @param value The kpiDescription to set.
-       * @return This builder for chaining.
-       */
-      public Builder setKpiDescription(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        kpiDescription_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string kpi_description = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearKpiDescription() {
-        
-        kpiDescription_ = getDefaultInstance().getKpiDescription();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string kpi_description = 2;</code>
-       * @param value The bytes for kpiDescription to set.
-       * @return This builder for chaining.
-       */
-      public Builder setKpiDescriptionBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        kpiDescription_ = value;
-        onChanged();
-        return this;
-      }
-
-      private java.util.List<monitoring.Monitoring.KpiId> kpiIdList_ =
-        java.util.Collections.emptyList();
-      private void ensureKpiIdListIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          kpiIdList_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>(kpiIdList_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdListBuilder_;
-
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-       */
-      public java.util.List<monitoring.Monitoring.KpiId> getKpiIdListList() {
-        if (kpiIdListBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(kpiIdList_);
-        } else {
-          return kpiIdListBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-       */
-      public int getKpiIdListCount() {
-        if (kpiIdListBuilder_ == null) {
-          return kpiIdList_.size();
-        } else {
-          return kpiIdListBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-       */
-      public monitoring.Monitoring.KpiId getKpiIdList(int index) {
-        if (kpiIdListBuilder_ == null) {
-          return kpiIdList_.get(index);
-        } else {
-          return kpiIdListBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-       */
-      public Builder setKpiIdList(
-          int index, monitoring.Monitoring.KpiId value) {
-        if (kpiIdListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiIdListIsMutable();
-          kpiIdList_.set(index, value);
-          onChanged();
-        } else {
-          kpiIdListBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-       */
-      public Builder setKpiIdList(
-          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdListBuilder_ == null) {
-          ensureKpiIdListIsMutable();
-          kpiIdList_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          kpiIdListBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-       */
-      public Builder addKpiIdList(monitoring.Monitoring.KpiId value) {
-        if (kpiIdListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiIdListIsMutable();
-          kpiIdList_.add(value);
-          onChanged();
-        } else {
-          kpiIdListBuilder_.addMessage(value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-       */
-      public Builder addKpiIdList(
-          int index, monitoring.Monitoring.KpiId value) {
-        if (kpiIdListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiIdListIsMutable();
-          kpiIdList_.add(index, value);
-          onChanged();
-        } else {
-          kpiIdListBuilder_.addMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-       */
-      public Builder addKpiIdList(
-          monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdListBuilder_ == null) {
-          ensureKpiIdListIsMutable();
-          kpiIdList_.add(builderForValue.build());
-          onChanged();
-        } else {
-          kpiIdListBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-       */
-      public Builder addKpiIdList(
-          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdListBuilder_ == null) {
-          ensureKpiIdListIsMutable();
-          kpiIdList_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          kpiIdListBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-       */
-      public Builder addAllKpiIdList(
-          java.lang.Iterable<? extends monitoring.Monitoring.KpiId> values) {
-        if (kpiIdListBuilder_ == null) {
-          ensureKpiIdListIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, kpiIdList_);
-          onChanged();
-        } else {
-          kpiIdListBuilder_.addAllMessages(values);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-       */
-      public Builder clearKpiIdList() {
-        if (kpiIdListBuilder_ == null) {
-          kpiIdList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          kpiIdListBuilder_.clear();
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-       */
-      public Builder removeKpiIdList(int index) {
-        if (kpiIdListBuilder_ == null) {
-          ensureKpiIdListIsMutable();
-          kpiIdList_.remove(index);
-          onChanged();
-        } else {
-          kpiIdListBuilder_.remove(index);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder getKpiIdListBuilder(
-          int index) {
-        return getKpiIdListFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-       */
-      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
-          int index) {
-        if (kpiIdListBuilder_ == null) {
-          return kpiIdList_.get(index);  } else {
-          return kpiIdListBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-       */
-      public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
-           getKpiIdListOrBuilderList() {
-        if (kpiIdListBuilder_ != null) {
-          return kpiIdListBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(kpiIdList_);
-        }
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder addKpiIdListBuilder() {
-        return getKpiIdListFieldBuilder().addBuilder(
-            monitoring.Monitoring.KpiId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder addKpiIdListBuilder(
-          int index) {
-        return getKpiIdListFieldBuilder().addBuilder(
-            index, monitoring.Monitoring.KpiId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
-       */
-      public java.util.List<monitoring.Monitoring.KpiId.Builder> 
-           getKpiIdListBuilderList() {
-        return getKpiIdListFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
-          getKpiIdListFieldBuilder() {
-        if (kpiIdListBuilder_ == null) {
-          kpiIdListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
-                  kpiIdList_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          kpiIdList_ = null;
-        }
-        return kpiIdListBuilder_;
-      }
-
-      private int kpiSampleType_ = 0;
-      /**
-       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
-       * @return The enum numeric value on the wire for kpiSampleType.
-       */
-      @java.lang.Override public int getKpiSampleTypeValue() {
-        return kpiSampleType_;
-      }
-      /**
-       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
-       * @param value The enum numeric value on the wire for kpiSampleType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setKpiSampleTypeValue(int value) {
-        
-        kpiSampleType_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
-       * @return The kpiSampleType.
-       */
-      @java.lang.Override
-      public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType() {
-        @SuppressWarnings("deprecation")
-        kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(kpiSampleType_);
-        return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
-      }
-      /**
-       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
-       * @param value The kpiSampleType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setKpiSampleType(kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        
-        kpiSampleType_ = value.getNumber();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearKpiSampleType() {
-        
-        kpiSampleType_ = 0;
-        onChanged();
-        return this;
-      }
-
-      private context.ContextOuterClass.DeviceId deviceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
-      /**
-       * <code>.context.DeviceId device_id = 5;</code>
-       * @return Whether the deviceId field is set.
-       */
-      public boolean hasDeviceId() {
-        return deviceIdBuilder_ != null || deviceId_ != null;
-      }
-      /**
-       * <code>.context.DeviceId device_id = 5;</code>
-       * @return The deviceId.
-       */
-      public context.ContextOuterClass.DeviceId getDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
-        } else {
-          return deviceIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.DeviceId device_id = 5;</code>
-       */
-      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          deviceId_ = value;
-          onChanged();
-        } else {
-          deviceIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.DeviceId device_id = 5;</code>
-       */
-      public Builder setDeviceId(
-          context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = builderForValue.build();
-          onChanged();
-        } else {
-          deviceIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.DeviceId device_id = 5;</code>
-       */
-      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
-          if (deviceId_ != null) {
-            deviceId_ =
-              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
-          } else {
-            deviceId_ = value;
-          }
-          onChanged();
-        } else {
-          deviceIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.DeviceId device_id = 5;</code>
-       */
-      public Builder clearDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
-          onChanged();
-        } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.DeviceId device_id = 5;</code>
-       */
-      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
-        
-        onChanged();
-        return getDeviceIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.DeviceId device_id = 5;</code>
-       */
-      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-        if (deviceIdBuilder_ != null) {
-          return deviceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return deviceId_ == null ?
-              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
-        }
-      }
-      /**
-       * <code>.context.DeviceId device_id = 5;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
-          getDeviceIdFieldBuilder() {
-        if (deviceIdBuilder_ == null) {
-          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
-                  getDeviceId(),
-                  getParentForChildren(),
-                  isClean());
-          deviceId_ = null;
-        }
-        return deviceIdBuilder_;
-      }
-
-      private context.ContextOuterClass.EndPointId endpointId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
-      /**
-       * <code>.context.EndPointId endpoint_id = 6;</code>
-       * @return Whether the endpointId field is set.
-       */
-      public boolean hasEndpointId() {
-        return endpointIdBuilder_ != null || endpointId_ != null;
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 6;</code>
-       * @return The endpointId.
-       */
-      public context.ContextOuterClass.EndPointId getEndpointId() {
-        if (endpointIdBuilder_ == null) {
-          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
-        } else {
-          return endpointIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 6;</code>
-       */
-      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
-        if (endpointIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          endpointId_ = value;
-          onChanged();
-        } else {
-          endpointIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 6;</code>
-       */
-      public Builder setEndpointId(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = builderForValue.build();
-          onChanged();
-        } else {
-          endpointIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 6;</code>
-       */
-      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
-        if (endpointIdBuilder_ == null) {
-          if (endpointId_ != null) {
-            endpointId_ =
-              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
-          } else {
-            endpointId_ = value;
-          }
-          onChanged();
-        } else {
-          endpointIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 6;</code>
-       */
-      public Builder clearEndpointId() {
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = null;
-          onChanged();
-        } else {
-          endpointId_ = null;
-          endpointIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 6;</code>
-       */
-      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
-        
-        onChanged();
-        return getEndpointIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 6;</code>
-       */
-      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-        if (endpointIdBuilder_ != null) {
-          return endpointIdBuilder_.getMessageOrBuilder();
-        } else {
-          return endpointId_ == null ?
-              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
-        }
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 6;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getEndpointIdFieldBuilder() {
-        if (endpointIdBuilder_ == null) {
-          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  getEndpointId(),
-                  getParentForChildren(),
-                  isClean());
-          endpointId_ = null;
-        }
-        return endpointIdBuilder_;
-      }
-
-      private context.ContextOuterClass.ServiceId serviceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
-      /**
-       * <code>.context.ServiceId service_id = 7;</code>
-       * @return Whether the serviceId field is set.
-       */
-      public boolean hasServiceId() {
-        return serviceIdBuilder_ != null || serviceId_ != null;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 7;</code>
-       * @return The serviceId.
-       */
-      public context.ContextOuterClass.ServiceId getServiceId() {
-        if (serviceIdBuilder_ == null) {
-          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
-        } else {
-          return serviceIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.ServiceId service_id = 7;</code>
-       */
-      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          serviceId_ = value;
-          onChanged();
-        } else {
-          serviceIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 7;</code>
-       */
-      public Builder setServiceId(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = builderForValue.build();
-          onChanged();
-        } else {
-          serviceIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 7;</code>
-       */
-      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
-          if (serviceId_ != null) {
-            serviceId_ =
-              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
-          } else {
-            serviceId_ = value;
-          }
-          onChanged();
-        } else {
-          serviceIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 7;</code>
-       */
-      public Builder clearServiceId() {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
-          onChanged();
-        } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 7;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
-        
-        onChanged();
-        return getServiceIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.ServiceId service_id = 7;</code>
-       */
-      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-        if (serviceIdBuilder_ != null) {
-          return serviceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return serviceId_ == null ?
-              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
-        }
-      }
-      /**
-       * <code>.context.ServiceId service_id = 7;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getServiceIdFieldBuilder() {
-        if (serviceIdBuilder_ == null) {
-          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  getServiceId(),
-                  getParentForChildren(),
-                  isClean());
-          serviceId_ = null;
-        }
-        return serviceIdBuilder_;
-      }
-
-      private context.ContextOuterClass.SliceId sliceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
-      /**
-       * <code>.context.SliceId slice_id = 8;</code>
-       * @return Whether the sliceId field is set.
-       */
-      public boolean hasSliceId() {
-        return sliceIdBuilder_ != null || sliceId_ != null;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 8;</code>
-       * @return The sliceId.
-       */
-      public context.ContextOuterClass.SliceId getSliceId() {
-        if (sliceIdBuilder_ == null) {
-          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
-        } else {
-          return sliceIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.SliceId slice_id = 8;</code>
-       */
-      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
-        if (sliceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          sliceId_ = value;
-          onChanged();
-        } else {
-          sliceIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 8;</code>
-       */
-      public Builder setSliceId(
-          context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = builderForValue.build();
-          onChanged();
-        } else {
-          sliceIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 8;</code>
-       */
-      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
-        if (sliceIdBuilder_ == null) {
-          if (sliceId_ != null) {
-            sliceId_ =
-              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
-          } else {
-            sliceId_ = value;
-          }
-          onChanged();
-        } else {
-          sliceIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 8;</code>
-       */
-      public Builder clearSliceId() {
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = null;
-          onChanged();
-        } else {
-          sliceId_ = null;
-          sliceIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 8;</code>
-       */
-      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
-        
-        onChanged();
-        return getSliceIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.SliceId slice_id = 8;</code>
-       */
-      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
-        if (sliceIdBuilder_ != null) {
-          return sliceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return sliceId_ == null ?
-              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
-        }
-      }
-      /**
-       * <code>.context.SliceId slice_id = 8;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
-          getSliceIdFieldBuilder() {
-        if (sliceIdBuilder_ == null) {
-          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
-                  getSliceId(),
-                  getParentForChildren(),
-                  isClean());
-          sliceId_ = null;
-        }
-        return sliceIdBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:monitoring.EditedKpiDescriptor)
-    }
-
-    // @@protoc_insertion_point(class_scope:monitoring.EditedKpiDescriptor)
-    private static final monitoring.Monitoring.EditedKpiDescriptor DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.EditedKpiDescriptor();
-    }
-
-    public static monitoring.Monitoring.EditedKpiDescriptor getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<EditedKpiDescriptor>
-        PARSER = new com.google.protobuf.AbstractParser<EditedKpiDescriptor>() {
-      @java.lang.Override
-      public EditedKpiDescriptor parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new EditedKpiDescriptor(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<EditedKpiDescriptor> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<EditedKpiDescriptor> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public monitoring.Monitoring.EditedKpiDescriptor getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface MonitorKpiRequestOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.MonitorKpiRequest)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return Whether the kpiId field is set.
-     */
-    boolean hasKpiId();
-    /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return The kpiId.
-     */
-    monitoring.Monitoring.KpiId getKpiId();
-    /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     */
-    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
-
-    /**
-     * <code>float monitoring_window_s = 2;</code>
-     * @return The monitoringWindowS.
-     */
-    float getMonitoringWindowS();
-
-    /**
-     * <pre>
-     * Pending add field to reflect Available Device Protocols
-     * </pre>
-     *
-     * <code>float sampling_rate_s = 3;</code>
-     * @return The samplingRateS.
-     */
-    float getSamplingRateS();
-  }
-  /**
-   * Protobuf type {@code monitoring.MonitorKpiRequest}
-   */
-  public static final class MonitorKpiRequest extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.MonitorKpiRequest)
-      MonitorKpiRequestOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use MonitorKpiRequest.newBuilder() to construct.
-    private MonitorKpiRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private MonitorKpiRequest() {
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new MonitorKpiRequest();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private MonitorKpiRequest(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            case 10: {
-              monitoring.Monitoring.KpiId.Builder subBuilder = null;
-              if (kpiId_ != null) {
-                subBuilder = kpiId_.toBuilder();
-              }
-              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(kpiId_);
-                kpiId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 21: {
-
-              monitoringWindowS_ = input.readFloat();
-              break;
-            }
-            case 29: {
-
-              samplingRateS_ = input.readFloat();
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.MonitorKpiRequest.class, monitoring.Monitoring.MonitorKpiRequest.Builder.class);
-    }
-
-    public static final int KPI_ID_FIELD_NUMBER = 1;
-    private monitoring.Monitoring.KpiId kpiId_;
-    /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return Whether the kpiId field is set.
-     */
-    @java.lang.Override
-    public boolean hasKpiId() {
-      return kpiId_ != null;
-    }
-    /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return The kpiId.
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiId getKpiId() {
-      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
-    }
-    /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-      return getKpiId();
-    }
-
-    public static final int MONITORING_WINDOW_S_FIELD_NUMBER = 2;
-    private float monitoringWindowS_;
-    /**
-     * <code>float monitoring_window_s = 2;</code>
-     * @return The monitoringWindowS.
-     */
-    @java.lang.Override
-    public float getMonitoringWindowS() {
-      return monitoringWindowS_;
-    }
-
-    public static final int SAMPLING_RATE_S_FIELD_NUMBER = 3;
-    private float samplingRateS_;
-    /**
-     * <pre>
-     * Pending add field to reflect Available Device Protocols
-     * </pre>
-     *
-     * <code>float sampling_rate_s = 3;</code>
-     * @return The samplingRateS.
-     */
-    @java.lang.Override
-    public float getSamplingRateS() {
-      return samplingRateS_;
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (kpiId_ != null) {
-        output.writeMessage(1, getKpiId());
-      }
-      if (monitoringWindowS_ != 0F) {
-        output.writeFloat(2, monitoringWindowS_);
-      }
-      if (samplingRateS_ != 0F) {
-        output.writeFloat(3, samplingRateS_);
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (kpiId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getKpiId());
-      }
-      if (monitoringWindowS_ != 0F) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(2, monitoringWindowS_);
-      }
-      if (samplingRateS_ != 0F) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(3, samplingRateS_);
-      }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof monitoring.Monitoring.MonitorKpiRequest)) {
-        return super.equals(obj);
-      }
-      monitoring.Monitoring.MonitorKpiRequest other = (monitoring.Monitoring.MonitorKpiRequest) obj;
-
-      if (hasKpiId() != other.hasKpiId()) return false;
-      if (hasKpiId()) {
-        if (!getKpiId()
-            .equals(other.getKpiId())) return false;
-      }
-      if (java.lang.Float.floatToIntBits(getMonitoringWindowS())
-          != java.lang.Float.floatToIntBits(
-              other.getMonitoringWindowS())) return false;
-      if (java.lang.Float.floatToIntBits(getSamplingRateS())
-          != java.lang.Float.floatToIntBits(
-              other.getSamplingRateS())) return false;
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasKpiId()) {
-        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiId().hashCode();
-      }
-      hash = (37 * hash) + MONITORING_WINDOW_S_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getMonitoringWindowS());
-      hash = (37 * hash) + SAMPLING_RATE_S_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getSamplingRateS());
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static monitoring.Monitoring.MonitorKpiRequest parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static monitoring.Monitoring.MonitorKpiRequest parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(monitoring.Monitoring.MonitorKpiRequest prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code monitoring.MonitorKpiRequest}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.MonitorKpiRequest)
-        monitoring.Monitoring.MonitorKpiRequestOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.MonitorKpiRequest.class, monitoring.Monitoring.MonitorKpiRequest.Builder.class);
-      }
-
-      // Construct using monitoring.Monitoring.MonitorKpiRequest.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
-        } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
-        }
-        monitoringWindowS_ = 0F;
-
-        samplingRateS_ = 0F;
-
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor;
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.MonitorKpiRequest getDefaultInstanceForType() {
-        return monitoring.Monitoring.MonitorKpiRequest.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.MonitorKpiRequest build() {
-        monitoring.Monitoring.MonitorKpiRequest result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.MonitorKpiRequest buildPartial() {
-        monitoring.Monitoring.MonitorKpiRequest result = new monitoring.Monitoring.MonitorKpiRequest(this);
-        if (kpiIdBuilder_ == null) {
-          result.kpiId_ = kpiId_;
-        } else {
-          result.kpiId_ = kpiIdBuilder_.build();
-        }
-        result.monitoringWindowS_ = monitoringWindowS_;
-        result.samplingRateS_ = samplingRateS_;
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.MonitorKpiRequest) {
-          return mergeFrom((monitoring.Monitoring.MonitorKpiRequest)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(monitoring.Monitoring.MonitorKpiRequest other) {
-        if (other == monitoring.Monitoring.MonitorKpiRequest.getDefaultInstance()) return this;
-        if (other.hasKpiId()) {
-          mergeKpiId(other.getKpiId());
-        }
-        if (other.getMonitoringWindowS() != 0F) {
-          setMonitoringWindowS(other.getMonitoringWindowS());
-        }
-        if (other.getSamplingRateS() != 0F) {
-          setSamplingRateS(other.getSamplingRateS());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        monitoring.Monitoring.MonitorKpiRequest parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.MonitorKpiRequest) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private monitoring.Monitoring.KpiId kpiId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       * @return Whether the kpiId field is set.
-       */
-      public boolean hasKpiId() {
-        return kpiIdBuilder_ != null || kpiId_ != null;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       * @return The kpiId.
-       */
-      public monitoring.Monitoring.KpiId getKpiId() {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
-        } else {
-          return kpiIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          kpiId_ = value;
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder setKpiId(
-          monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = builderForValue.build();
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (kpiId_ != null) {
-            kpiId_ =
-              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
-          } else {
-            kpiId_ = value;
-          }
-          onChanged();
-        } else {
-          kpiIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder clearKpiId() {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
-          onChanged();
-        } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
-        
-        onChanged();
-        return getKpiIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-        if (kpiIdBuilder_ != null) {
-          return kpiIdBuilder_.getMessageOrBuilder();
-        } else {
-          return kpiId_ == null ?
-              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
-        }
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
-          getKpiIdFieldBuilder() {
-        if (kpiIdBuilder_ == null) {
-          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
-                  getKpiId(),
-                  getParentForChildren(),
-                  isClean());
-          kpiId_ = null;
-        }
-        return kpiIdBuilder_;
-      }
+      return true;
+    }
 
-      private float monitoringWindowS_ ;
-      /**
-       * <code>float monitoring_window_s = 2;</code>
-       * @return The monitoringWindowS.
-       */
-      @java.lang.Override
-      public float getMonitoringWindowS() {
-        return monitoringWindowS_;
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < kpiId_.size(); i++) {
+        output.writeMessage(1, kpiId_.get(i));
       }
-      /**
-       * <code>float monitoring_window_s = 2;</code>
-       * @param value The monitoringWindowS to set.
-       * @return This builder for chaining.
-       */
-      public Builder setMonitoringWindowS(float value) {
-        
-        monitoringWindowS_ = value;
-        onChanged();
-        return this;
+      if (monitoringWindowS_ != 0F) {
+        output.writeFloat(2, monitoringWindowS_);
       }
-      /**
-       * <code>float monitoring_window_s = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearMonitoringWindowS() {
-        
-        monitoringWindowS_ = 0F;
-        onChanged();
-        return this;
+      if (samplingRateS_ != 0F) {
+        output.writeFloat(3, samplingRateS_);
+      }
+      if (lastNSamples_ != 0) {
+        output.writeUInt32(4, lastNSamples_);
+      }
+      if (startTimestamp_ != null) {
+        output.writeMessage(5, getStartTimestamp());
       }
+      if (endTimestamp_ != null) {
+        output.writeMessage(6, getEndTimestamp());
+      }
+      unknownFields.writeTo(output);
+    }
 
-      private float samplingRateS_ ;
-      /**
-       * <pre>
-       * Pending add field to reflect Available Device Protocols
-       * </pre>
-       *
-       * <code>float sampling_rate_s = 3;</code>
-       * @return The samplingRateS.
-       */
-      @java.lang.Override
-      public float getSamplingRateS() {
-        return samplingRateS_;
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < kpiId_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, kpiId_.get(i));
       }
-      /**
-       * <pre>
-       * Pending add field to reflect Available Device Protocols
-       * </pre>
-       *
-       * <code>float sampling_rate_s = 3;</code>
-       * @param value The samplingRateS to set.
-       * @return This builder for chaining.
-       */
-      public Builder setSamplingRateS(float value) {
-        
-        samplingRateS_ = value;
-        onChanged();
-        return this;
+      if (monitoringWindowS_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(2, monitoringWindowS_);
       }
-      /**
-       * <pre>
-       * Pending add field to reflect Available Device Protocols
-       * </pre>
-       *
-       * <code>float sampling_rate_s = 3;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearSamplingRateS() {
-        
-        samplingRateS_ = 0F;
-        onChanged();
-        return this;
+      if (samplingRateS_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(3, samplingRateS_);
       }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
+      if (lastNSamples_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(4, lastNSamples_);
       }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
+      if (startTimestamp_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, getStartTimestamp());
       }
+      if (endTimestamp_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, getEndTimestamp());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
 
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof monitoring.Monitoring.KpiQuery)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.KpiQuery other = (monitoring.Monitoring.KpiQuery) obj;
 
-      // @@protoc_insertion_point(builder_scope:monitoring.MonitorKpiRequest)
+      if (!getKpiIdList()
+          .equals(other.getKpiIdList())) return false;
+      if (java.lang.Float.floatToIntBits(getMonitoringWindowS())
+          != java.lang.Float.floatToIntBits(
+              other.getMonitoringWindowS())) return false;
+      if (java.lang.Float.floatToIntBits(getSamplingRateS())
+          != java.lang.Float.floatToIntBits(
+              other.getSamplingRateS())) return false;
+      if (getLastNSamples()
+          != other.getLastNSamples()) return false;
+      if (hasStartTimestamp() != other.hasStartTimestamp()) return false;
+      if (hasStartTimestamp()) {
+        if (!getStartTimestamp()
+            .equals(other.getStartTimestamp())) return false;
+      }
+      if (hasEndTimestamp() != other.hasEndTimestamp()) return false;
+      if (hasEndTimestamp()) {
+        if (!getEndTimestamp()
+            .equals(other.getEndTimestamp())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.MonitorKpiRequest)
-    private static final monitoring.Monitoring.MonitorKpiRequest DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.MonitorKpiRequest();
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getKpiIdCount() > 0) {
+        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiIdList().hashCode();
+      }
+      hash = (37 * hash) + MONITORING_WINDOW_S_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getMonitoringWindowS());
+      hash = (37 * hash) + SAMPLING_RATE_S_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getSamplingRateS());
+      hash = (37 * hash) + LAST_N_SAMPLES_FIELD_NUMBER;
+      hash = (53 * hash) + getLastNSamples();
+      if (hasStartTimestamp()) {
+        hash = (37 * hash) + START_TIMESTAMP_FIELD_NUMBER;
+        hash = (53 * hash) + getStartTimestamp().hashCode();
+      }
+      if (hasEndTimestamp()) {
+        hash = (37 * hash) + END_TIMESTAMP_FIELD_NUMBER;
+        hash = (53 * hash) + getEndTimestamp().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
     }
 
-    public static monitoring.Monitoring.MonitorKpiRequest getDefaultInstance() {
-      return DEFAULT_INSTANCE;
+    public static monitoring.Monitoring.KpiQuery parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.KpiQuery parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiQuery parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.KpiQuery parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiQuery parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.KpiQuery parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiQuery parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiQuery parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiQuery parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiQuery parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiQuery parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiQuery parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
-    private static final com.google.protobuf.Parser<MonitorKpiRequest>
-        PARSER = new com.google.protobuf.AbstractParser<MonitorKpiRequest>() {
-      @java.lang.Override
-      public MonitorKpiRequest parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new MonitorKpiRequest(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<MonitorKpiRequest> parser() {
-      return PARSER;
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(monitoring.Monitoring.KpiQuery prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
-
     @java.lang.Override
-    public com.google.protobuf.Parser<MonitorKpiRequest> getParserForType() {
-      return PARSER;
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.MonitorKpiRequest getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
     }
-
-  }
-
-  public interface KpiQueryOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.KpiQuery)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-     */
-    java.util.List<monitoring.Monitoring.KpiId> 
-        getKpiIdList();
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-     */
-    monitoring.Monitoring.KpiId getKpiId(int index);
     /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-     */
-    int getKpiIdCount();
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-     */
-    java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
-        getKpiIdOrBuilderList();
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     * Protobuf type {@code monitoring.KpiQuery}
      */
-    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
-        int index);
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:monitoring.KpiQuery)
+        monitoring.Monitoring.KpiQueryOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiQuery_descriptor;
+      }
 
-    /**
-     * <code>float monitoring_window_s = 2;</code>
-     * @return The monitoringWindowS.
-     */
-    float getMonitoringWindowS();
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiQuery_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.KpiQuery.class, monitoring.Monitoring.KpiQuery.Builder.class);
+      }
 
-    /**
-     * <code>float sampling_rate_s = 3;</code>
-     * @return The samplingRateS.
-     */
-    float getSamplingRateS();
+      // Construct using monitoring.Monitoring.KpiQuery.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
 
-    /**
-     * <pre>
-     * used when you want something like "get the last N many samples
-     * </pre>
-     *
-     * <code>uint32 last_n_samples = 4;</code>
-     * @return The lastNSamples.
-     */
-    int getLastNSamples();
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getKpiIdFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          kpiIdBuilder_.clear();
+        }
+        monitoringWindowS_ = 0F;
 
-    /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>string start_date = 5;</code>
-     * @return The startDate.
-     */
-    java.lang.String getStartDate();
-    /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>string start_date = 5;</code>
-     * @return The bytes for startDate.
-     */
-    com.google.protobuf.ByteString
-        getStartDateBytes();
+        samplingRateS_ = 0F;
 
-    /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>string end_date = 6;</code>
-     * @return The endDate.
-     */
-    java.lang.String getEndDate();
-    /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>string end_date = 6;</code>
-     * @return The bytes for endDate.
-     */
-    com.google.protobuf.ByteString
-        getEndDateBytes();
-  }
-  /**
-   * Protobuf type {@code monitoring.KpiQuery}
-   */
-  public static final class KpiQuery extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.KpiQuery)
-      KpiQueryOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use KpiQuery.newBuilder() to construct.
-    private KpiQuery(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private KpiQuery() {
-      kpiId_ = java.util.Collections.emptyList();
-      startDate_ = "";
-      endDate_ = "";
-    }
+        lastNSamples_ = 0;
 
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new KpiQuery();
-    }
+        if (startTimestampBuilder_ == null) {
+          startTimestamp_ = null;
+        } else {
+          startTimestamp_ = null;
+          startTimestampBuilder_ = null;
+        }
+        if (endTimestampBuilder_ == null) {
+          endTimestamp_ = null;
+        } else {
+          endTimestamp_ = null;
+          endTimestampBuilder_ = null;
+        }
+        return this;
+      }
 
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private KpiQuery(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiQuery_descriptor;
       }
-      int mutable_bitField0_ = 0;
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                kpiId_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              kpiId_.add(
-                  input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry));
-              break;
-            }
-            case 21: {
 
-              monitoringWindowS_ = input.readFloat();
-              break;
-            }
-            case 29: {
+      @java.lang.Override
+      public monitoring.Monitoring.KpiQuery getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiQuery.getDefaultInstance();
+      }
 
-              samplingRateS_ = input.readFloat();
-              break;
-            }
-            case 32: {
+      @java.lang.Override
+      public monitoring.Monitoring.KpiQuery build() {
+        monitoring.Monitoring.KpiQuery result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
 
-              lastNSamples_ = input.readUInt32();
-              break;
-            }
-            case 42: {
-              java.lang.String s = input.readStringRequireUtf8();
+      @java.lang.Override
+      public monitoring.Monitoring.KpiQuery buildPartial() {
+        monitoring.Monitoring.KpiQuery result = new monitoring.Monitoring.KpiQuery(this);
+        int from_bitField0_ = bitField0_;
+        if (kpiIdBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            kpiId_ = java.util.Collections.unmodifiableList(kpiId_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.kpiId_ = kpiId_;
+        } else {
+          result.kpiId_ = kpiIdBuilder_.build();
+        }
+        result.monitoringWindowS_ = monitoringWindowS_;
+        result.samplingRateS_ = samplingRateS_;
+        result.lastNSamples_ = lastNSamples_;
+        if (startTimestampBuilder_ == null) {
+          result.startTimestamp_ = startTimestamp_;
+        } else {
+          result.startTimestamp_ = startTimestampBuilder_.build();
+        }
+        if (endTimestampBuilder_ == null) {
+          result.endTimestamp_ = endTimestamp_;
+        } else {
+          result.endTimestamp_ = endTimestampBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
 
-              startDate_ = s;
-              break;
-            }
-            case 50: {
-              java.lang.String s = input.readStringRequireUtf8();
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.KpiQuery) {
+          return mergeFrom((monitoring.Monitoring.KpiQuery)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
 
-              endDate_ = s;
-              break;
+      public Builder mergeFrom(monitoring.Monitoring.KpiQuery other) {
+        if (other == monitoring.Monitoring.KpiQuery.getDefaultInstance()) return this;
+        if (kpiIdBuilder_ == null) {
+          if (!other.kpiId_.isEmpty()) {
+            if (kpiId_.isEmpty()) {
+              kpiId_ = other.kpiId_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureKpiIdIsMutable();
+              kpiId_.addAll(other.kpiId_);
             }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
+            onChanged();
+          }
+        } else {
+          if (!other.kpiId_.isEmpty()) {
+            if (kpiIdBuilder_.isEmpty()) {
+              kpiIdBuilder_.dispose();
+              kpiIdBuilder_ = null;
+              kpiId_ = other.kpiId_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              kpiIdBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getKpiIdFieldBuilder() : null;
+            } else {
+              kpiIdBuilder_.addAllMessages(other.kpiId_);
             }
           }
         }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          kpiId_ = java.util.Collections.unmodifiableList(kpiId_);
+        if (other.getMonitoringWindowS() != 0F) {
+          setMonitoringWindowS(other.getMonitoringWindowS());
         }
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
+        if (other.getSamplingRateS() != 0F) {
+          setSamplingRateS(other.getSamplingRateS());
+        }
+        if (other.getLastNSamples() != 0) {
+          setLastNSamples(other.getLastNSamples());
+        }
+        if (other.hasStartTimestamp()) {
+          mergeStartTimestamp(other.getStartTimestamp());
+        }
+        if (other.hasEndTimestamp()) {
+          mergeEndTimestamp(other.getEndTimestamp());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
       }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiQuery_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiQuery_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.KpiQuery.class, monitoring.Monitoring.KpiQuery.Builder.class);
-    }
-
-    public static final int KPI_ID_FIELD_NUMBER = 1;
-    private java.util.List<monitoring.Monitoring.KpiId> kpiId_;
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<monitoring.Monitoring.KpiId> getKpiIdList() {
-      return kpiId_;
-    }
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
-        getKpiIdOrBuilderList() {
-      return kpiId_;
-    }
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-     */
-    @java.lang.Override
-    public int getKpiIdCount() {
-      return kpiId_.size();
-    }
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiId getKpiId(int index) {
-      return kpiId_.get(index);
-    }
-    /**
-     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
-        int index) {
-      return kpiId_.get(index);
-    }
-
-    public static final int MONITORING_WINDOW_S_FIELD_NUMBER = 2;
-    private float monitoringWindowS_;
-    /**
-     * <code>float monitoring_window_s = 2;</code>
-     * @return The monitoringWindowS.
-     */
-    @java.lang.Override
-    public float getMonitoringWindowS() {
-      return monitoringWindowS_;
-    }
-
-    public static final int SAMPLING_RATE_S_FIELD_NUMBER = 3;
-    private float samplingRateS_;
-    /**
-     * <code>float sampling_rate_s = 3;</code>
-     * @return The samplingRateS.
-     */
-    @java.lang.Override
-    public float getSamplingRateS() {
-      return samplingRateS_;
-    }
-
-    public static final int LAST_N_SAMPLES_FIELD_NUMBER = 4;
-    private int lastNSamples_;
-    /**
-     * <pre>
-     * used when you want something like "get the last N many samples
-     * </pre>
-     *
-     * <code>uint32 last_n_samples = 4;</code>
-     * @return The lastNSamples.
-     */
-    @java.lang.Override
-    public int getLastNSamples() {
-      return lastNSamples_;
-    }
 
-    public static final int START_DATE_FIELD_NUMBER = 5;
-    private volatile java.lang.Object startDate_;
-    /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>string start_date = 5;</code>
-     * @return The startDate.
-     */
-    @java.lang.Override
-    public java.lang.String getStartDate() {
-      java.lang.Object ref = startDate_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        startDate_ = s;
-        return s;
-      }
-    }
-    /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>string start_date = 5;</code>
-     * @return The bytes for startDate.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString
-        getStartDateBytes() {
-      java.lang.Object ref = startDate_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        startDate_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-    }
 
-    public static final int END_DATE_FIELD_NUMBER = 6;
-    private volatile java.lang.Object endDate_;
-    /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>string end_date = 6;</code>
-     * @return The endDate.
-     */
-    @java.lang.Override
-    public java.lang.String getEndDate() {
-      java.lang.Object ref = endDate_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        endDate_ = s;
-        return s;
-      }
-    }
-    /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>string end_date = 6;</code>
-     * @return The bytes for endDate.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString
-        getEndDateBytes() {
-      java.lang.Object ref = endDate_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        endDate_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.KpiQuery parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.KpiQuery) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
       }
-    }
+      private int bitField0_;
 
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
+      private java.util.List<monitoring.Monitoring.KpiId> kpiId_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiIdIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiId_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>(kpiId_);
+          bitField0_ |= 0x00000001;
+         }
+      }
 
-      memoizedIsInitialized = 1;
-      return true;
-    }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
 
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      for (int i = 0; i < kpiId_.size(); i++) {
-        output.writeMessage(1, kpiId_.get(i));
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiId> getKpiIdList() {
+        if (kpiIdBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(kpiId_);
+        } else {
+          return kpiIdBuilder_.getMessageList();
+        }
       }
-      if (monitoringWindowS_ != 0F) {
-        output.writeFloat(2, monitoringWindowS_);
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public int getKpiIdCount() {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_.size();
+        } else {
+          return kpiIdBuilder_.getCount();
+        }
       }
-      if (samplingRateS_ != 0F) {
-        output.writeFloat(3, samplingRateS_);
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiId getKpiId(int index) {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_.get(index);
+        } else {
+          return kpiIdBuilder_.getMessage(index);
+        }
       }
-      if (lastNSamples_ != 0) {
-        output.writeUInt32(4, lastNSamples_);
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder setKpiId(
+          int index, monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdIsMutable();
+          kpiId_.set(index, value);
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(index, value);
+        }
+        return this;
       }
-      if (!getStartDateBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, startDate_);
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder setKpiId(
+          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          ensureKpiIdIsMutable();
+          kpiId_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
       }
-      if (!getEndDateBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, endDate_);
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder addKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdIsMutable();
+          kpiId_.add(value);
+          onChanged();
+        } else {
+          kpiIdBuilder_.addMessage(value);
+        }
+        return this;
       }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      for (int i = 0; i < kpiId_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, kpiId_.get(i));
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder addKpiId(
+          int index, monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdIsMutable();
+          kpiId_.add(index, value);
+          onChanged();
+        } else {
+          kpiIdBuilder_.addMessage(index, value);
+        }
+        return this;
       }
-      if (monitoringWindowS_ != 0F) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(2, monitoringWindowS_);
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder addKpiId(
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          ensureKpiIdIsMutable();
+          kpiId_.add(builderForValue.build());
+          onChanged();
+        } else {
+          kpiIdBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
       }
-      if (samplingRateS_ != 0F) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(3, samplingRateS_);
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder addKpiId(
+          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          ensureKpiIdIsMutable();
+          kpiId_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiIdBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
       }
-      if (lastNSamples_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(4, lastNSamples_);
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder addAllKpiId(
+          java.lang.Iterable<? extends monitoring.Monitoring.KpiId> values) {
+        if (kpiIdBuilder_ == null) {
+          ensureKpiIdIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, kpiId_);
+          onChanged();
+        } else {
+          kpiIdBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder clearKpiId() {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          kpiIdBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder removeKpiId(int index) {
+        if (kpiIdBuilder_ == null) {
+          ensureKpiIdIsMutable();
+          kpiId_.remove(index);
+          onChanged();
+        } else {
+          kpiIdBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder(
+          int index) {
+        return getKpiIdFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
+          int index) {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_.get(index);  } else {
+          return kpiIdBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+           getKpiIdOrBuilderList() {
+        if (kpiIdBuilder_ != null) {
+          return kpiIdBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(kpiId_);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder addKpiIdBuilder() {
+        return getKpiIdFieldBuilder().addBuilder(
+            monitoring.Monitoring.KpiId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder addKpiIdBuilder(
+          int index) {
+        return getKpiIdFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.KpiId.getDefaultInstance());
       }
-      if (!getStartDateBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, startDate_);
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiId.Builder> 
+           getKpiIdBuilderList() {
+        return getKpiIdFieldBuilder().getBuilderList();
       }
-      if (!getEndDateBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, endDate_);
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
+          getKpiIdFieldBuilder() {
+        if (kpiIdBuilder_ == null) {
+          kpiIdBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
+                  kpiId_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          kpiId_ = null;
+        }
+        return kpiIdBuilder_;
       }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
 
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
+      private float monitoringWindowS_ ;
+      /**
+       * <code>float monitoring_window_s = 2;</code>
+       * @return The monitoringWindowS.
+       */
+      @java.lang.Override
+      public float getMonitoringWindowS() {
+        return monitoringWindowS_;
       }
-      if (!(obj instanceof monitoring.Monitoring.KpiQuery)) {
-        return super.equals(obj);
+      /**
+       * <code>float monitoring_window_s = 2;</code>
+       * @param value The monitoringWindowS to set.
+       * @return This builder for chaining.
+       */
+      public Builder setMonitoringWindowS(float value) {
+        
+        monitoringWindowS_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>float monitoring_window_s = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearMonitoringWindowS() {
+        
+        monitoringWindowS_ = 0F;
+        onChanged();
+        return this;
       }
-      monitoring.Monitoring.KpiQuery other = (monitoring.Monitoring.KpiQuery) obj;
-
-      if (!getKpiIdList()
-          .equals(other.getKpiIdList())) return false;
-      if (java.lang.Float.floatToIntBits(getMonitoringWindowS())
-          != java.lang.Float.floatToIntBits(
-              other.getMonitoringWindowS())) return false;
-      if (java.lang.Float.floatToIntBits(getSamplingRateS())
-          != java.lang.Float.floatToIntBits(
-              other.getSamplingRateS())) return false;
-      if (getLastNSamples()
-          != other.getLastNSamples()) return false;
-      if (!getStartDate()
-          .equals(other.getStartDate())) return false;
-      if (!getEndDate()
-          .equals(other.getEndDate())) return false;
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
 
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
+      private float samplingRateS_ ;
+      /**
+       * <code>float sampling_rate_s = 3;</code>
+       * @return The samplingRateS.
+       */
+      @java.lang.Override
+      public float getSamplingRateS() {
+        return samplingRateS_;
       }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      if (getKpiIdCount() > 0) {
-        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiIdList().hashCode();
+      /**
+       * <code>float sampling_rate_s = 3;</code>
+       * @param value The samplingRateS to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSamplingRateS(float value) {
+        
+        samplingRateS_ = value;
+        onChanged();
+        return this;
       }
-      hash = (37 * hash) + MONITORING_WINDOW_S_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getMonitoringWindowS());
-      hash = (37 * hash) + SAMPLING_RATE_S_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getSamplingRateS());
-      hash = (37 * hash) + LAST_N_SAMPLES_FIELD_NUMBER;
-      hash = (53 * hash) + getLastNSamples();
-      hash = (37 * hash) + START_DATE_FIELD_NUMBER;
-      hash = (53 * hash) + getStartDate().hashCode();
-      hash = (37 * hash) + END_DATE_FIELD_NUMBER;
-      hash = (53 * hash) + getEndDate().hashCode();
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static monitoring.Monitoring.KpiQuery parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static monitoring.Monitoring.KpiQuery parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static monitoring.Monitoring.KpiQuery parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static monitoring.Monitoring.KpiQuery parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static monitoring.Monitoring.KpiQuery parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static monitoring.Monitoring.KpiQuery parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static monitoring.Monitoring.KpiQuery parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static monitoring.Monitoring.KpiQuery parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static monitoring.Monitoring.KpiQuery parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static monitoring.Monitoring.KpiQuery parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static monitoring.Monitoring.KpiQuery parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static monitoring.Monitoring.KpiQuery parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(monitoring.Monitoring.KpiQuery prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code monitoring.KpiQuery}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.KpiQuery)
-        monitoring.Monitoring.KpiQueryOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiQuery_descriptor;
+      /**
+       * <code>float sampling_rate_s = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSamplingRateS() {
+        
+        samplingRateS_ = 0F;
+        onChanged();
+        return this;
       }
 
+      private int lastNSamples_ ;
+      /**
+       * <pre>
+       * used when you want something like "get the last N many samples
+       * </pre>
+       *
+       * <code>uint32 last_n_samples = 4;</code>
+       * @return The lastNSamples.
+       */
       @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiQuery_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.KpiQuery.class, monitoring.Monitoring.KpiQuery.Builder.class);
+      public int getLastNSamples() {
+        return lastNSamples_;
       }
-
-      // Construct using monitoring.Monitoring.KpiQuery.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
+      /**
+       * <pre>
+       * used when you want something like "get the last N many samples
+       * </pre>
+       *
+       * <code>uint32 last_n_samples = 4;</code>
+       * @param value The lastNSamples to set.
+       * @return This builder for chaining.
+       */
+      public Builder setLastNSamples(int value) {
+        
+        lastNSamples_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the last N many samples
+       * </pre>
+       *
+       * <code>uint32 last_n_samples = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearLastNSamples() {
+        
+        lastNSamples_ = 0;
+        onChanged();
+        return this;
       }
 
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
+      private context.ContextOuterClass.Timestamp startTimestamp_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> startTimestampBuilder_;
+      /**
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * @return Whether the startTimestamp field is set.
+       */
+      public boolean hasStartTimestamp() {
+        return startTimestampBuilder_ != null || startTimestamp_ != null;
       }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-          getKpiIdFieldBuilder();
+      /**
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * @return The startTimestamp.
+       */
+      public context.ContextOuterClass.Timestamp getStartTimestamp() {
+        if (startTimestampBuilder_ == null) {
+          return startTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : startTimestamp_;
+        } else {
+          return startTimestampBuilder_.getMessage();
         }
       }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      /**
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp start_timestamp = 5;</code>
+       */
+      public Builder setStartTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (startTimestampBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          startTimestamp_ = value;
+          onChanged();
         } else {
-          kpiIdBuilder_.clear();
+          startTimestampBuilder_.setMessage(value);
         }
-        monitoringWindowS_ = 0F;
-
-        samplingRateS_ = 0F;
-
-        lastNSamples_ = 0;
-
-        startDate_ = "";
-
-        endDate_ = "";
 
         return this;
       }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiQuery_descriptor;
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.KpiQuery getDefaultInstanceForType() {
-        return monitoring.Monitoring.KpiQuery.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.KpiQuery build() {
-        monitoring.Monitoring.KpiQuery result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
+      /**
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp start_timestamp = 5;</code>
+       */
+      public Builder setStartTimestamp(
+          context.ContextOuterClass.Timestamp.Builder builderForValue) {
+        if (startTimestampBuilder_ == null) {
+          startTimestamp_ = builderForValue.build();
+          onChanged();
+        } else {
+          startTimestampBuilder_.setMessage(builderForValue.build());
         }
-        return result;
-      }
 
-      @java.lang.Override
-      public monitoring.Monitoring.KpiQuery buildPartial() {
-        monitoring.Monitoring.KpiQuery result = new monitoring.Monitoring.KpiQuery(this);
-        int from_bitField0_ = bitField0_;
-        if (kpiIdBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            kpiId_ = java.util.Collections.unmodifiableList(kpiId_);
-            bitField0_ = (bitField0_ & ~0x00000001);
+        return this;
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp start_timestamp = 5;</code>
+       */
+      public Builder mergeStartTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (startTimestampBuilder_ == null) {
+          if (startTimestamp_ != null) {
+            startTimestamp_ =
+              context.ContextOuterClass.Timestamp.newBuilder(startTimestamp_).mergeFrom(value).buildPartial();
+          } else {
+            startTimestamp_ = value;
           }
-          result.kpiId_ = kpiId_;
+          onChanged();
         } else {
-          result.kpiId_ = kpiIdBuilder_.build();
+          startTimestampBuilder_.mergeFrom(value);
         }
-        result.monitoringWindowS_ = monitoringWindowS_;
-        result.samplingRateS_ = samplingRateS_;
-        result.lastNSamples_ = lastNSamples_;
-        result.startDate_ = startDate_;
-        result.endDate_ = endDate_;
-        onBuilt();
-        return result;
-      }
 
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
+        return this;
       }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
+      /**
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp start_timestamp = 5;</code>
+       */
+      public Builder clearStartTimestamp() {
+        if (startTimestampBuilder_ == null) {
+          startTimestamp_ = null;
+          onChanged();
+        } else {
+          startTimestamp_ = null;
+          startTimestampBuilder_ = null;
+        }
+
+        return this;
       }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
+      /**
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp start_timestamp = 5;</code>
+       */
+      public context.ContextOuterClass.Timestamp.Builder getStartTimestampBuilder() {
+        
+        onChanged();
+        return getStartTimestampFieldBuilder().getBuilder();
       }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
+      /**
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp start_timestamp = 5;</code>
+       */
+      public context.ContextOuterClass.TimestampOrBuilder getStartTimestampOrBuilder() {
+        if (startTimestampBuilder_ != null) {
+          return startTimestampBuilder_.getMessageOrBuilder();
+        } else {
+          return startTimestamp_ == null ?
+              context.ContextOuterClass.Timestamp.getDefaultInstance() : startTimestamp_;
+        }
       }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
+      /**
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp start_timestamp = 5;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
+          getStartTimestampFieldBuilder() {
+        if (startTimestampBuilder_ == null) {
+          startTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
+                  getStartTimestamp(),
+                  getParentForChildren(),
+                  isClean());
+          startTimestamp_ = null;
+        }
+        return startTimestampBuilder_;
       }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
+
+      private context.ContextOuterClass.Timestamp endTimestamp_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> endTimestampBuilder_;
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * @return Whether the endTimestamp field is set.
+       */
+      public boolean hasEndTimestamp() {
+        return endTimestampBuilder_ != null || endTimestamp_ != null;
       }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.KpiQuery) {
-          return mergeFrom((monitoring.Monitoring.KpiQuery)other);
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * @return The endTimestamp.
+       */
+      public context.ContextOuterClass.Timestamp getEndTimestamp() {
+        if (endTimestampBuilder_ == null) {
+          return endTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_;
         } else {
-          super.mergeFrom(other);
-          return this;
+          return endTimestampBuilder_.getMessage();
         }
       }
-
-      public Builder mergeFrom(monitoring.Monitoring.KpiQuery other) {
-        if (other == monitoring.Monitoring.KpiQuery.getDefaultInstance()) return this;
-        if (kpiIdBuilder_ == null) {
-          if (!other.kpiId_.isEmpty()) {
-            if (kpiId_.isEmpty()) {
-              kpiId_ = other.kpiId_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureKpiIdIsMutable();
-              kpiId_.addAll(other.kpiId_);
-            }
-            onChanged();
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp end_timestamp = 6;</code>
+       */
+      public Builder setEndTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (endTimestampBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          endTimestamp_ = value;
+          onChanged();
         } else {
-          if (!other.kpiId_.isEmpty()) {
-            if (kpiIdBuilder_.isEmpty()) {
-              kpiIdBuilder_.dispose();
-              kpiIdBuilder_ = null;
-              kpiId_ = other.kpiId_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              kpiIdBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getKpiIdFieldBuilder() : null;
-            } else {
-              kpiIdBuilder_.addAllMessages(other.kpiId_);
-            }
-          }
-        }
-        if (other.getMonitoringWindowS() != 0F) {
-          setMonitoringWindowS(other.getMonitoringWindowS());
+          endTimestampBuilder_.setMessage(value);
         }
-        if (other.getSamplingRateS() != 0F) {
-          setSamplingRateS(other.getSamplingRateS());
-        }
-        if (other.getLastNSamples() != 0) {
-          setLastNSamples(other.getLastNSamples());
+
+        return this;
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp end_timestamp = 6;</code>
+       */
+      public Builder setEndTimestamp(
+          context.ContextOuterClass.Timestamp.Builder builderForValue) {
+        if (endTimestampBuilder_ == null) {
+          endTimestamp_ = builderForValue.build();
+          onChanged();
+        } else {
+          endTimestampBuilder_.setMessage(builderForValue.build());
         }
-        if (!other.getStartDate().isEmpty()) {
-          startDate_ = other.startDate_;
+
+        return this;
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp end_timestamp = 6;</code>
+       */
+      public Builder mergeEndTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (endTimestampBuilder_ == null) {
+          if (endTimestamp_ != null) {
+            endTimestamp_ =
+              context.ContextOuterClass.Timestamp.newBuilder(endTimestamp_).mergeFrom(value).buildPartial();
+          } else {
+            endTimestamp_ = value;
+          }
           onChanged();
+        } else {
+          endTimestampBuilder_.mergeFrom(value);
         }
-        if (!other.getEndDate().isEmpty()) {
-          endDate_ = other.endDate_;
+
+        return this;
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp end_timestamp = 6;</code>
+       */
+      public Builder clearEndTimestamp() {
+        if (endTimestampBuilder_ == null) {
+          endTimestamp_ = null;
           onChanged();
+        } else {
+          endTimestamp_ = null;
+          endTimestampBuilder_ = null;
         }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
+
         return this;
       }
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp end_timestamp = 6;</code>
+       */
+      public context.ContextOuterClass.Timestamp.Builder getEndTimestampBuilder() {
+        
+        onChanged();
+        return getEndTimestampFieldBuilder().getBuilder();
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp end_timestamp = 6;</code>
+       */
+      public context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder() {
+        if (endTimestampBuilder_ != null) {
+          return endTimestampBuilder_.getMessageOrBuilder();
+        } else {
+          return endTimestamp_ == null ?
+              context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_;
+        }
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp end_timestamp = 6;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
+          getEndTimestampFieldBuilder() {
+        if (endTimestampBuilder_ == null) {
+          endTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
+                  getEndTimestamp(),
+                  getParentForChildren(),
+                  isClean());
+          endTimestamp_ = null;
+        }
+        return endTimestampBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
 
       @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
       }
 
+
+      // @@protoc_insertion_point(builder_scope:monitoring.KpiQuery)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.KpiQuery)
+    private static final monitoring.Monitoring.KpiQuery DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiQuery();
+    }
+
+    public static monitoring.Monitoring.KpiQuery getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<KpiQuery>
+        PARSER = new com.google.protobuf.AbstractParser<KpiQuery>() {
       @java.lang.Override
-      public Builder mergeFrom(
+      public KpiQuery parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        monitoring.Monitoring.KpiQuery parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.KpiQuery) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new KpiQuery(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<KpiQuery> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<KpiQuery> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.KpiQuery getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface KpiIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiId)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Uuid kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
+     */
+    boolean hasKpiId();
+    /**
+     * <code>.context.Uuid kpi_id = 1;</code>
+     * @return The kpiId.
+     */
+    context.ContextOuterClass.Uuid getKpiId();
+    /**
+     * <code>.context.Uuid kpi_id = 1;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder();
+  }
+  /**
+   * Protobuf type {@code monitoring.KpiId}
+   */
+  public static final class KpiId extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.KpiId)
+      KpiIdOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use KpiId.newBuilder() to construct.
+    private KpiId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private KpiId() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new KpiId();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private KpiId(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (kpiId_ != null) {
+                subBuilder = kpiId_.toBuilder();
+              }
+              kpiId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiId_);
+                kpiId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
           }
         }
-        return this;
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
       }
-      private int bitField0_;
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor;
+    }
 
-      private java.util.List<monitoring.Monitoring.KpiId> kpiId_ =
-        java.util.Collections.emptyList();
-      private void ensureKpiIdIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          kpiId_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>(kpiId_);
-          bitField0_ |= 0x00000001;
-         }
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_KpiId_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.KpiId.class, monitoring.Monitoring.KpiId.Builder.class);
+    }
+
+    public static final int KPI_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid kpiId_;
+    /**
+     * <code>.context.Uuid kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
+     */
+    @java.lang.Override
+    public boolean hasKpiId() {
+      return kpiId_ != null;
+    }
+    /**
+     * <code>.context.Uuid kpi_id = 1;</code>
+     * @return The kpiId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getKpiId() {
+      return kpiId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_;
+    }
+    /**
+     * <code>.context.Uuid kpi_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder() {
+      return getKpiId();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (kpiId_ != null) {
+        output.writeMessage(1, getKpiId());
       }
+      unknownFields.writeTo(output);
+    }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
 
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-       */
-      public java.util.List<monitoring.Monitoring.KpiId> getKpiIdList() {
-        if (kpiIdBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(kpiId_);
-        } else {
-          return kpiIdBuilder_.getMessageList();
-        }
+      size = 0;
+      if (kpiId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getKpiId());
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-       */
-      public int getKpiIdCount() {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_.size();
-        } else {
-          return kpiIdBuilder_.getCount();
-        }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-       */
-      public monitoring.Monitoring.KpiId getKpiId(int index) {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_.get(index);
-        } else {
-          return kpiIdBuilder_.getMessage(index);
-        }
+      if (!(obj instanceof monitoring.Monitoring.KpiId)) {
+        return super.equals(obj);
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder setKpiId(
-          int index, monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiIdIsMutable();
-          kpiId_.set(index, value);
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(index, value);
-        }
-        return this;
+      monitoring.Monitoring.KpiId other = (monitoring.Monitoring.KpiId) obj;
+
+      if (hasKpiId() != other.hasKpiId()) return false;
+      if (hasKpiId()) {
+        if (!getKpiId()
+            .equals(other.getKpiId())) return false;
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder setKpiId(
-          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          ensureKpiIdIsMutable();
-          kpiId_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder addKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiIdIsMutable();
-          kpiId_.add(value);
-          onChanged();
-        } else {
-          kpiIdBuilder_.addMessage(value);
-        }
-        return this;
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasKpiId()) {
+        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiId().hashCode();
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder addKpiId(
-          int index, monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiIdIsMutable();
-          kpiId_.add(index, value);
-          onChanged();
-        } else {
-          kpiIdBuilder_.addMessage(index, value);
-        }
-        return this;
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static monitoring.Monitoring.KpiId parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.KpiId parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiId parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.KpiId parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiId parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.KpiId parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiId parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiId parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiId parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiId parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiId parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiId parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(monitoring.Monitoring.KpiId prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code monitoring.KpiId}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:monitoring.KpiId)
+        monitoring.Monitoring.KpiIdOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor;
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder addKpiId(
-          monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          ensureKpiIdIsMutable();
-          kpiId_.add(builderForValue.build());
-          onChanged();
-        } else {
-          kpiIdBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiId_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.KpiId.class, monitoring.Monitoring.KpiId.Builder.class);
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder addKpiId(
-          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          ensureKpiIdIsMutable();
-          kpiId_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          kpiIdBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
+
+      // Construct using monitoring.Monitoring.KpiId.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder addAllKpiId(
-          java.lang.Iterable<? extends monitoring.Monitoring.KpiId> values) {
-        if (kpiIdBuilder_ == null) {
-          ensureKpiIdIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, kpiId_);
-          onChanged();
-        } else {
-          kpiIdBuilder_.addAllMessages(values);
-        }
-        return this;
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder clearKpiId() {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          kpiIdBuilder_.clear();
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
         }
-        return this;
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder removeKpiId(int index) {
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
         if (kpiIdBuilder_ == null) {
-          ensureKpiIdIsMutable();
-          kpiId_.remove(index);
-          onChanged();
+          kpiId_ = null;
         } else {
-          kpiIdBuilder_.remove(index);
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
         }
         return this;
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder(
-          int index) {
-        return getKpiIdFieldBuilder().getBuilder(index);
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor;
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-       */
-      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
-          int index) {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_.get(index);  } else {
-          return kpiIdBuilder_.getMessageOrBuilder(index);
-        }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiId getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiId.getDefaultInstance();
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-       */
-      public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
-           getKpiIdOrBuilderList() {
-        if (kpiIdBuilder_ != null) {
-          return kpiIdBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(kpiId_);
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiId build() {
+        monitoring.Monitoring.KpiId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
         }
+        return result;
       }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder addKpiIdBuilder() {
-        return getKpiIdFieldBuilder().addBuilder(
-            monitoring.Monitoring.KpiId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder addKpiIdBuilder(
-          int index) {
-        return getKpiIdFieldBuilder().addBuilder(
-            index, monitoring.Monitoring.KpiId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
-       */
-      public java.util.List<monitoring.Monitoring.KpiId.Builder> 
-           getKpiIdBuilderList() {
-        return getKpiIdFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
-          getKpiIdFieldBuilder() {
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiId buildPartial() {
+        monitoring.Monitoring.KpiId result = new monitoring.Monitoring.KpiId(this);
         if (kpiIdBuilder_ == null) {
-          kpiIdBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
-                  kpiId_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          kpiId_ = null;
+          result.kpiId_ = kpiId_;
+        } else {
+          result.kpiId_ = kpiIdBuilder_.build();
         }
-        return kpiIdBuilder_;
+        onBuilt();
+        return result;
       }
 
-      private float monitoringWindowS_ ;
-      /**
-       * <code>float monitoring_window_s = 2;</code>
-       * @return The monitoringWindowS.
-       */
       @java.lang.Override
-      public float getMonitoringWindowS() {
-        return monitoringWindowS_;
-      }
-      /**
-       * <code>float monitoring_window_s = 2;</code>
-       * @param value The monitoringWindowS to set.
-       * @return This builder for chaining.
-       */
-      public Builder setMonitoringWindowS(float value) {
-        
-        monitoringWindowS_ = value;
-        onChanged();
-        return this;
+      public Builder clone() {
+        return super.clone();
       }
-      /**
-       * <code>float monitoring_window_s = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearMonitoringWindowS() {
-        
-        monitoringWindowS_ = 0F;
-        onChanged();
-        return this;
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
       }
-
-      private float samplingRateS_ ;
-      /**
-       * <code>float sampling_rate_s = 3;</code>
-       * @return The samplingRateS.
-       */
       @java.lang.Override
-      public float getSamplingRateS() {
-        return samplingRateS_;
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
       }
-      /**
-       * <code>float sampling_rate_s = 3;</code>
-       * @param value The samplingRateS to set.
-       * @return This builder for chaining.
-       */
-      public Builder setSamplingRateS(float value) {
-        
-        samplingRateS_ = value;
-        onChanged();
-        return this;
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
       }
-      /**
-       * <code>float sampling_rate_s = 3;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearSamplingRateS() {
-        
-        samplingRateS_ = 0F;
-        onChanged();
-        return this;
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
       }
-
-      private int lastNSamples_ ;
-      /**
-       * <pre>
-       * used when you want something like "get the last N many samples
-       * </pre>
-       *
-       * <code>uint32 last_n_samples = 4;</code>
-       * @return The lastNSamples.
-       */
       @java.lang.Override
-      public int getLastNSamples() {
-        return lastNSamples_;
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
       }
-      /**
-       * <pre>
-       * used when you want something like "get the last N many samples
-       * </pre>
-       *
-       * <code>uint32 last_n_samples = 4;</code>
-       * @param value The lastNSamples to set.
-       * @return This builder for chaining.
-       */
-      public Builder setLastNSamples(int value) {
-        
-        lastNSamples_ = value;
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.KpiId) {
+          return mergeFrom((monitoring.Monitoring.KpiId)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(monitoring.Monitoring.KpiId other) {
+        if (other == monitoring.Monitoring.KpiId.getDefaultInstance()) return this;
+        if (other.hasKpiId()) {
+          mergeKpiId(other.getKpiId());
+        }
+        this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
       }
-      /**
-       * <pre>
-       * used when you want something like "get the last N many samples
-       * </pre>
-       *
-       * <code>uint32 last_n_samples = 4;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearLastNSamples() {
-        
-        lastNSamples_ = 0;
-        onChanged();
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.KpiId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.KpiId) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
         return this;
       }
 
-      private java.lang.Object startDate_ = "";
+      private context.ContextOuterClass.Uuid kpiId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> kpiIdBuilder_;
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>string start_date = 5;</code>
-       * @return The startDate.
+       * <code>.context.Uuid kpi_id = 1;</code>
+       * @return Whether the kpiId field is set.
        */
-      public java.lang.String getStartDate() {
-        java.lang.Object ref = startDate_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          startDate_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
+      public boolean hasKpiId() {
+        return kpiIdBuilder_ != null || kpiId_ != null;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>string start_date = 5;</code>
-       * @return The bytes for startDate.
+       * <code>.context.Uuid kpi_id = 1;</code>
+       * @return The kpiId.
        */
-      public com.google.protobuf.ByteString
-          getStartDateBytes() {
-        java.lang.Object ref = startDate_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          startDate_ = b;
-          return b;
+      public context.ContextOuterClass.Uuid getKpiId() {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_;
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          return kpiIdBuilder_.getMessage();
         }
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>string start_date = 5;</code>
-       * @param value The startDate to set.
-       * @return This builder for chaining.
-       */
-      public Builder setStartDate(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        startDate_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>string start_date = 5;</code>
-       * @return This builder for chaining.
+       * <code>.context.Uuid kpi_id = 1;</code>
        */
-      public Builder clearStartDate() {
-        
-        startDate_ = getDefaultInstance().getStartDate();
-        onChanged();
+      public Builder setKpiId(context.ContextOuterClass.Uuid value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiId_ = value;
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(value);
+        }
+
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>string start_date = 5;</code>
-       * @param value The bytes for startDate to set.
-       * @return This builder for chaining.
+       * <code>.context.Uuid kpi_id = 1;</code>
        */
-      public Builder setStartDateBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        startDate_ = value;
-        onChanged();
+      public Builder setKpiId(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(builderForValue.build());
+        }
+
         return this;
       }
-
-      private java.lang.Object endDate_ = "";
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>string end_date = 6;</code>
-       * @return The endDate.
+       * <code>.context.Uuid kpi_id = 1;</code>
        */
-      public java.lang.String getEndDate() {
-        java.lang.Object ref = endDate_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          endDate_ = s;
-          return s;
+      public Builder mergeKpiId(context.ContextOuterClass.Uuid value) {
+        if (kpiIdBuilder_ == null) {
+          if (kpiId_ != null) {
+            kpiId_ =
+              context.ContextOuterClass.Uuid.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+          } else {
+            kpiId_ = value;
+          }
+          onChanged();
         } else {
-          return (java.lang.String) ref;
+          kpiIdBuilder_.mergeFrom(value);
         }
+
+        return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>string end_date = 6;</code>
-       * @return The bytes for endDate.
+       * <code>.context.Uuid kpi_id = 1;</code>
        */
-      public com.google.protobuf.ByteString
-          getEndDateBytes() {
-        java.lang.Object ref = endDate_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          endDate_ = b;
-          return b;
+      public Builder clearKpiId() {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>string end_date = 6;</code>
-       * @param value The endDate to set.
-       * @return This builder for chaining.
+       * <code>.context.Uuid kpi_id = 1;</code>
        */
-      public Builder setEndDate(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        endDate_ = value;
+      public context.ContextOuterClass.Uuid.Builder getKpiIdBuilder() {
+        
         onChanged();
-        return this;
+        return getKpiIdFieldBuilder().getBuilder();
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>string end_date = 6;</code>
-       * @return This builder for chaining.
+       * <code>.context.Uuid kpi_id = 1;</code>
        */
-      public Builder clearEndDate() {
-        
-        endDate_ = getDefaultInstance().getEndDate();
-        onChanged();
-        return this;
+      public context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder() {
+        if (kpiIdBuilder_ != null) {
+          return kpiIdBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiId_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_;
+        }
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>string end_date = 6;</code>
-       * @param value The bytes for endDate to set.
-       * @return This builder for chaining.
+       * <code>.context.Uuid kpi_id = 1;</code>
        */
-      public Builder setEndDateBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        endDate_ = value;
-        onChanged();
-        return this;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getKpiIdFieldBuilder() {
+        if (kpiIdBuilder_ == null) {
+          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getKpiId(),
+                  getParentForChildren(),
+                  isClean());
+          kpiId_ = null;
+        }
+        return kpiIdBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -7572,85 +4998,115 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.KpiQuery)
+      // @@protoc_insertion_point(builder_scope:monitoring.KpiId)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.KpiQuery)
-    private static final monitoring.Monitoring.KpiQuery DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.KpiId)
+    private static final monitoring.Monitoring.KpiId DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiQuery();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiId();
     }
 
-    public static monitoring.Monitoring.KpiQuery getDefaultInstance() {
+    public static monitoring.Monitoring.KpiId getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<KpiQuery>
-        PARSER = new com.google.protobuf.AbstractParser<KpiQuery>() {
+    private static final com.google.protobuf.Parser<KpiId>
+        PARSER = new com.google.protobuf.AbstractParser<KpiId>() {
       @java.lang.Override
-      public KpiQuery parsePartialFrom(
+      public KpiId parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new KpiQuery(input, extensionRegistry);
+        return new KpiId(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<KpiQuery> parser() {
+    public static com.google.protobuf.Parser<KpiId> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<KpiQuery> getParserForType() {
+    public com.google.protobuf.Parser<KpiId> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.KpiQuery getDefaultInstanceForType() {
+    public monitoring.Monitoring.KpiId getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface KpiIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.KpiId)
+  public interface KpiOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.Kpi)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Uuid kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
      * @return Whether the kpiId field is set.
      */
     boolean hasKpiId();
     /**
-     * <code>.context.Uuid kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
      * @return The kpiId.
      */
-    context.ContextOuterClass.Uuid getKpiId();
+    monitoring.Monitoring.KpiId getKpiId();
     /**
-     * <code>.context.Uuid kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder();
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
+
+    /**
+     * <code>.context.Timestamp timestamp = 2;</code>
+     * @return Whether the timestamp field is set.
+     */
+    boolean hasTimestamp();
+    /**
+     * <code>.context.Timestamp timestamp = 2;</code>
+     * @return The timestamp.
+     */
+    context.ContextOuterClass.Timestamp getTimestamp();
+    /**
+     * <code>.context.Timestamp timestamp = 2;</code>
+     */
+    context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder();
+
+    /**
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * @return Whether the kpiValue field is set.
+     */
+    boolean hasKpiValue();
+    /**
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * @return The kpiValue.
+     */
+    monitoring.Monitoring.KpiValue getKpiValue();
+    /**
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     */
+    monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder();
   }
   /**
-   * Protobuf type {@code monitoring.KpiId}
+   * Protobuf type {@code monitoring.Kpi}
    */
-  public static final class KpiId extends
+  public static final class Kpi extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.KpiId)
-      KpiIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.Kpi)
+      KpiOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use KpiId.newBuilder() to construct.
-    private KpiId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Kpi.newBuilder() to construct.
+    private Kpi(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private KpiId() {
+    private Kpi() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new KpiId();
+      return new Kpi();
     }
 
     @java.lang.Override
@@ -7658,7 +5114,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private KpiId(
+    private Kpi(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -7677,11 +5133,11 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              monitoring.Monitoring.KpiId.Builder subBuilder = null;
               if (kpiId_ != null) {
                 subBuilder = kpiId_.toBuilder();
               }
-              kpiId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
               if (subBuilder != null) {
                 subBuilder.mergeFrom(kpiId_);
                 kpiId_ = subBuilder.buildPartial();
@@ -7689,6 +5145,32 @@ public final class Monitoring {
 
               break;
             }
+            case 18: {
+              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
+              if (timestamp_ != null) {
+                subBuilder = timestamp_.toBuilder();
+              }
+              timestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(timestamp_);
+                timestamp_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 26: {
+              monitoring.Monitoring.KpiValue.Builder subBuilder = null;
+              if (kpiValue_ != null) {
+                subBuilder = kpiValue_.toBuilder();
+              }
+              kpiValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiValue_);
+                kpiValue_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -7710,21 +5192,21 @@ public final class Monitoring {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_Kpi_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiId_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_Kpi_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.KpiId.class, monitoring.Monitoring.KpiId.Builder.class);
+              monitoring.Monitoring.Kpi.class, monitoring.Monitoring.Kpi.Builder.class);
     }
 
     public static final int KPI_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Uuid kpiId_;
+    private monitoring.Monitoring.KpiId kpiId_;
     /**
-     * <code>.context.Uuid kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
      * @return Whether the kpiId field is set.
      */
     @java.lang.Override
@@ -7732,21 +5214,73 @@ public final class Monitoring {
       return kpiId_ != null;
     }
     /**
-     * <code>.context.Uuid kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
      * @return The kpiId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getKpiId() {
-      return kpiId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_;
+    public monitoring.Monitoring.KpiId getKpiId() {
+      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
     }
     /**
-     * <code>.context.Uuid kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder() {
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
       return getKpiId();
     }
 
+    public static final int TIMESTAMP_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.Timestamp timestamp_;
+    /**
+     * <code>.context.Timestamp timestamp = 2;</code>
+     * @return Whether the timestamp field is set.
+     */
+    @java.lang.Override
+    public boolean hasTimestamp() {
+      return timestamp_ != null;
+    }
+    /**
+     * <code>.context.Timestamp timestamp = 2;</code>
+     * @return The timestamp.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Timestamp getTimestamp() {
+      return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+    }
+    /**
+     * <code>.context.Timestamp timestamp = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
+      return getTimestamp();
+    }
+
+    public static final int KPI_VALUE_FIELD_NUMBER = 3;
+    private monitoring.Monitoring.KpiValue kpiValue_;
+    /**
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * @return Whether the kpiValue field is set.
+     */
+    @java.lang.Override
+    public boolean hasKpiValue() {
+      return kpiValue_ != null;
+    }
+    /**
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * @return The kpiValue.
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValue getKpiValue() {
+      return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+    }
+    /**
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder() {
+      return getKpiValue();
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -7764,6 +5298,12 @@ public final class Monitoring {
       if (kpiId_ != null) {
         output.writeMessage(1, getKpiId());
       }
+      if (timestamp_ != null) {
+        output.writeMessage(2, getTimestamp());
+      }
+      if (kpiValue_ != null) {
+        output.writeMessage(3, getKpiValue());
+      }
       unknownFields.writeTo(output);
     }
 
@@ -7777,6 +5317,14 @@ public final class Monitoring {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(1, getKpiId());
       }
+      if (timestamp_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getTimestamp());
+      }
+      if (kpiValue_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, getKpiValue());
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -7787,16 +5335,26 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.KpiId)) {
+      if (!(obj instanceof monitoring.Monitoring.Kpi)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.KpiId other = (monitoring.Monitoring.KpiId) obj;
+      monitoring.Monitoring.Kpi other = (monitoring.Monitoring.Kpi) obj;
 
       if (hasKpiId() != other.hasKpiId()) return false;
       if (hasKpiId()) {
         if (!getKpiId()
             .equals(other.getKpiId())) return false;
       }
+      if (hasTimestamp() != other.hasTimestamp()) return false;
+      if (hasTimestamp()) {
+        if (!getTimestamp()
+            .equals(other.getTimestamp())) return false;
+      }
+      if (hasKpiValue() != other.hasKpiValue()) return false;
+      if (hasKpiValue()) {
+        if (!getKpiValue()
+            .equals(other.getKpiValue())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -7812,74 +5370,82 @@ public final class Monitoring {
         hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
         hash = (53 * hash) + getKpiId().hashCode();
       }
+      if (hasTimestamp()) {
+        hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
+        hash = (53 * hash) + getTimestamp().hashCode();
+      }
+      if (hasKpiValue()) {
+        hash = (37 * hash) + KPI_VALUE_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiValue().hashCode();
+      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.Kpi parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.Kpi parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.Kpi parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.Kpi parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(byte[] data)
+    public static monitoring.Monitoring.Kpi parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.Kpi parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.Kpi parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.Kpi parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiId parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.Kpi parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiId parseDelimitedFrom(
+    public static monitoring.Monitoring.Kpi parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.Kpi parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.Kpi parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -7892,7 +5458,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.KpiId prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.Kpi prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -7908,26 +5474,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.KpiId}
+     * Protobuf type {@code monitoring.Kpi}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.KpiId)
-        monitoring.Monitoring.KpiIdOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.Kpi)
+        monitoring.Monitoring.KpiOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_Kpi_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiId_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_Kpi_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.KpiId.class, monitoring.Monitoring.KpiId.Builder.class);
+                monitoring.Monitoring.Kpi.class, monitoring.Monitoring.Kpi.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.KpiId.newBuilder()
+      // Construct using monitoring.Monitoring.Kpi.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -7951,23 +5517,35 @@ public final class Monitoring {
           kpiId_ = null;
           kpiIdBuilder_ = null;
         }
+        if (timestampBuilder_ == null) {
+          timestamp_ = null;
+        } else {
+          timestamp_ = null;
+          timestampBuilder_ = null;
+        }
+        if (kpiValueBuilder_ == null) {
+          kpiValue_ = null;
+        } else {
+          kpiValue_ = null;
+          kpiValueBuilder_ = null;
+        }
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_Kpi_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiId getDefaultInstanceForType() {
-        return monitoring.Monitoring.KpiId.getDefaultInstance();
+      public monitoring.Monitoring.Kpi getDefaultInstanceForType() {
+        return monitoring.Monitoring.Kpi.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiId build() {
-        monitoring.Monitoring.KpiId result = buildPartial();
+      public monitoring.Monitoring.Kpi build() {
+        monitoring.Monitoring.Kpi result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -7975,13 +5553,23 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiId buildPartial() {
-        monitoring.Monitoring.KpiId result = new monitoring.Monitoring.KpiId(this);
+      public monitoring.Monitoring.Kpi buildPartial() {
+        monitoring.Monitoring.Kpi result = new monitoring.Monitoring.Kpi(this);
         if (kpiIdBuilder_ == null) {
           result.kpiId_ = kpiId_;
         } else {
           result.kpiId_ = kpiIdBuilder_.build();
         }
+        if (timestampBuilder_ == null) {
+          result.timestamp_ = timestamp_;
+        } else {
+          result.timestamp_ = timestampBuilder_.build();
+        }
+        if (kpiValueBuilder_ == null) {
+          result.kpiValue_ = kpiValue_;
+        } else {
+          result.kpiValue_ = kpiValueBuilder_.build();
+        }
         onBuilt();
         return result;
       }
@@ -8020,19 +5608,25 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.KpiId) {
-          return mergeFrom((monitoring.Monitoring.KpiId)other);
+        if (other instanceof monitoring.Monitoring.Kpi) {
+          return mergeFrom((monitoring.Monitoring.Kpi)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.KpiId other) {
-        if (other == monitoring.Monitoring.KpiId.getDefaultInstance()) return this;
+      public Builder mergeFrom(monitoring.Monitoring.Kpi other) {
+        if (other == monitoring.Monitoring.Kpi.getDefaultInstance()) return this;
         if (other.hasKpiId()) {
           mergeKpiId(other.getKpiId());
         }
+        if (other.hasTimestamp()) {
+          mergeTimestamp(other.getTimestamp());
+        }
+        if (other.hasKpiValue()) {
+          mergeKpiValue(other.getKpiValue());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -8048,11 +5642,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.KpiId parsedMessage = null;
+        monitoring.Monitoring.Kpi parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.KpiId) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.Kpi) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -8062,31 +5656,31 @@ public final class Monitoring {
         return this;
       }
 
-      private context.ContextOuterClass.Uuid kpiId_;
+      private monitoring.Monitoring.KpiId kpiId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> kpiIdBuilder_;
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        * @return Whether the kpiId field is set.
        */
       public boolean hasKpiId() {
         return kpiIdBuilder_ != null || kpiId_ != null;
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        * @return The kpiId.
        */
-      public context.ContextOuterClass.Uuid getKpiId() {
+      public monitoring.Monitoring.KpiId getKpiId() {
         if (kpiIdBuilder_ == null) {
-          return kpiId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_;
+          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
         } else {
           return kpiIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder setKpiId(context.ContextOuterClass.Uuid value) {
+      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
         if (kpiIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
@@ -8100,10 +5694,10 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
       public Builder setKpiId(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
         if (kpiIdBuilder_ == null) {
           kpiId_ = builderForValue.build();
           onChanged();
@@ -8114,13 +5708,13 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public Builder mergeKpiId(context.ContextOuterClass.Uuid value) {
+      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
         if (kpiIdBuilder_ == null) {
           if (kpiId_ != null) {
             kpiId_ =
-              context.ContextOuterClass.Uuid.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
           } else {
             kpiId_ = value;
           }
@@ -8132,7 +5726,7 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
       public Builder clearKpiId() {
         if (kpiIdBuilder_ == null) {
@@ -8146,33 +5740,33 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getKpiIdBuilder() {
+      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
         
         onChanged();
         return getKpiIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder() {
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
         if (kpiIdBuilder_ != null) {
           return kpiIdBuilder_.getMessageOrBuilder();
         } else {
           return kpiId_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_;
+              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
         }
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
           getKpiIdFieldBuilder() {
         if (kpiIdBuilder_ == null) {
           kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
                   getKpiId(),
                   getParentForChildren(),
                   isClean());
@@ -8180,6 +5774,244 @@ public final class Monitoring {
         }
         return kpiIdBuilder_;
       }
+
+      private context.ContextOuterClass.Timestamp timestamp_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> timestampBuilder_;
+      /**
+       * <code>.context.Timestamp timestamp = 2;</code>
+       * @return Whether the timestamp field is set.
+       */
+      public boolean hasTimestamp() {
+        return timestampBuilder_ != null || timestamp_ != null;
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 2;</code>
+       * @return The timestamp.
+       */
+      public context.ContextOuterClass.Timestamp getTimestamp() {
+        if (timestampBuilder_ == null) {
+          return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+        } else {
+          return timestampBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 2;</code>
+       */
+      public Builder setTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (timestampBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          timestamp_ = value;
+          onChanged();
+        } else {
+          timestampBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 2;</code>
+       */
+      public Builder setTimestamp(
+          context.ContextOuterClass.Timestamp.Builder builderForValue) {
+        if (timestampBuilder_ == null) {
+          timestamp_ = builderForValue.build();
+          onChanged();
+        } else {
+          timestampBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 2;</code>
+       */
+      public Builder mergeTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (timestampBuilder_ == null) {
+          if (timestamp_ != null) {
+            timestamp_ =
+              context.ContextOuterClass.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
+          } else {
+            timestamp_ = value;
+          }
+          onChanged();
+        } else {
+          timestampBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 2;</code>
+       */
+      public Builder clearTimestamp() {
+        if (timestampBuilder_ == null) {
+          timestamp_ = null;
+          onChanged();
+        } else {
+          timestamp_ = null;
+          timestampBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 2;</code>
+       */
+      public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
+        
+        onChanged();
+        return getTimestampFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 2;</code>
+       */
+      public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
+        if (timestampBuilder_ != null) {
+          return timestampBuilder_.getMessageOrBuilder();
+        } else {
+          return timestamp_ == null ?
+              context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+        }
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
+          getTimestampFieldBuilder() {
+        if (timestampBuilder_ == null) {
+          timestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
+                  getTimestamp(),
+                  getParentForChildren(),
+                  isClean());
+          timestamp_ = null;
+        }
+        return timestampBuilder_;
+      }
+
+      private monitoring.Monitoring.KpiValue kpiValue_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiValueBuilder_;
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * @return Whether the kpiValue field is set.
+       */
+      public boolean hasKpiValue() {
+        return kpiValueBuilder_ != null || kpiValue_ != null;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * @return The kpiValue.
+       */
+      public monitoring.Monitoring.KpiValue getKpiValue() {
+        if (kpiValueBuilder_ == null) {
+          return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+        } else {
+          return kpiValueBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      public Builder setKpiValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiValueBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiValue_ = value;
+          onChanged();
+        } else {
+          kpiValueBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      public Builder setKpiValue(
+          monitoring.Monitoring.KpiValue.Builder builderForValue) {
+        if (kpiValueBuilder_ == null) {
+          kpiValue_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiValueBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      public Builder mergeKpiValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiValueBuilder_ == null) {
+          if (kpiValue_ != null) {
+            kpiValue_ =
+              monitoring.Monitoring.KpiValue.newBuilder(kpiValue_).mergeFrom(value).buildPartial();
+          } else {
+            kpiValue_ = value;
+          }
+          onChanged();
+        } else {
+          kpiValueBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      public Builder clearKpiValue() {
+        if (kpiValueBuilder_ == null) {
+          kpiValue_ = null;
+          onChanged();
+        } else {
+          kpiValue_ = null;
+          kpiValueBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      public monitoring.Monitoring.KpiValue.Builder getKpiValueBuilder() {
+        
+        onChanged();
+        return getKpiValueFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      public monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder() {
+        if (kpiValueBuilder_ != null) {
+          return kpiValueBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiValue_ == null ?
+              monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+        }
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> 
+          getKpiValueFieldBuilder() {
+        if (kpiValueBuilder_ == null) {
+          kpiValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder>(
+                  getKpiValue(),
+                  getParentForChildren(),
+                  isClean());
+          kpiValue_ = null;
+        }
+        return kpiValueBuilder_;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -8193,113 +6025,130 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.KpiId)
+      // @@protoc_insertion_point(builder_scope:monitoring.Kpi)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.KpiId)
-    private static final monitoring.Monitoring.KpiId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.Kpi)
+    private static final monitoring.Monitoring.Kpi DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiId();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.Kpi();
     }
 
-    public static monitoring.Monitoring.KpiId getDefaultInstance() {
+    public static monitoring.Monitoring.Kpi getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<KpiId>
-        PARSER = new com.google.protobuf.AbstractParser<KpiId>() {
+    private static final com.google.protobuf.Parser<Kpi>
+        PARSER = new com.google.protobuf.AbstractParser<Kpi>() {
       @java.lang.Override
-      public KpiId parsePartialFrom(
+      public Kpi parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new KpiId(input, extensionRegistry);
+        return new Kpi(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<KpiId> parser() {
+    public static com.google.protobuf.Parser<Kpi> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<KpiId> getParserForType() {
+    public com.google.protobuf.Parser<Kpi> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.KpiId getDefaultInstanceForType() {
+    public monitoring.Monitoring.Kpi getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface KpiOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.Kpi)
+  public interface KpiValueRangeOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiValueRange)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return Whether the kpiId field is set.
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+     * @return Whether the kpiMinValue field is set.
      */
-    boolean hasKpiId();
+    boolean hasKpiMinValue();
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return The kpiId.
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+     * @return The kpiMinValue.
      */
-    monitoring.Monitoring.KpiId getKpiId();
+    monitoring.Monitoring.KpiValue getKpiMinValue();
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
      */
-    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
+    monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder();
 
     /**
-     * <code>string timestamp = 2;</code>
-     * @return The timestamp.
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     * @return Whether the kpiMaxValue field is set.
      */
-    java.lang.String getTimestamp();
+    boolean hasKpiMaxValue();
     /**
-     * <code>string timestamp = 2;</code>
-     * @return The bytes for timestamp.
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     * @return The kpiMaxValue.
      */
-    com.google.protobuf.ByteString
-        getTimestampBytes();
+    monitoring.Monitoring.KpiValue getKpiMaxValue();
+    /**
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     */
+    monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder();
 
     /**
-     * <code>.monitoring.KpiValue kpi_value = 3;</code>
-     * @return Whether the kpiValue field is set.
+     * <pre>
+     * by default True
+     * </pre>
+     *
+     * <code>bool inRange = 3;</code>
+     * @return The inRange.
      */
-    boolean hasKpiValue();
+    boolean getInRange();
+
     /**
-     * <code>.monitoring.KpiValue kpi_value = 3;</code>
-     * @return The kpiValue.
+     * <pre>
+     * False is outside the interval
+     * </pre>
+     *
+     * <code>bool includeMinValue = 4;</code>
+     * @return The includeMinValue.
      */
-    monitoring.Monitoring.KpiValue getKpiValue();
+    boolean getIncludeMinValue();
+
     /**
-     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * <pre>
+     * False is outside the interval
+     * </pre>
+     *
+     * <code>bool includeMaxValue = 5;</code>
+     * @return The includeMaxValue.
      */
-    monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder();
+    boolean getIncludeMaxValue();
   }
   /**
-   * Protobuf type {@code monitoring.Kpi}
+   * Protobuf type {@code monitoring.KpiValueRange}
    */
-  public static final class Kpi extends
+  public static final class KpiValueRange extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.Kpi)
-      KpiOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.KpiValueRange)
+      KpiValueRangeOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Kpi.newBuilder() to construct.
-    private Kpi(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use KpiValueRange.newBuilder() to construct.
+    private KpiValueRange(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Kpi() {
-      timestamp_ = "";
+    private KpiValueRange() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Kpi();
+      return new KpiValueRange();
     }
 
     @java.lang.Override
@@ -8307,7 +6156,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Kpi(
+    private KpiValueRange(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -8326,37 +6175,46 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              monitoring.Monitoring.KpiId.Builder subBuilder = null;
-              if (kpiId_ != null) {
-                subBuilder = kpiId_.toBuilder();
+              monitoring.Monitoring.KpiValue.Builder subBuilder = null;
+              if (kpiMinValue_ != null) {
+                subBuilder = kpiMinValue_.toBuilder();
               }
-              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
+              kpiMinValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(kpiId_);
-                kpiId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(kpiMinValue_);
+                kpiMinValue_ = subBuilder.buildPartial();
               }
 
               break;
             }
             case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              timestamp_ = s;
-              break;
-            }
-            case 26: {
               monitoring.Monitoring.KpiValue.Builder subBuilder = null;
-              if (kpiValue_ != null) {
-                subBuilder = kpiValue_.toBuilder();
+              if (kpiMaxValue_ != null) {
+                subBuilder = kpiMaxValue_.toBuilder();
               }
-              kpiValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
+              kpiMaxValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(kpiValue_);
-                kpiValue_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(kpiMaxValue_);
+                kpiMaxValue_ = subBuilder.buildPartial();
               }
 
               break;
             }
+            case 24: {
+
+              inRange_ = input.readBool();
+              break;
+            }
+            case 32: {
+
+              includeMinValue_ = input.readBool();
+              break;
+            }
+            case 40: {
+
+              includeMaxValue_ = input.readBool();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -8378,105 +6236,112 @@ public final class Monitoring {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_Kpi_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_Kpi_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.Kpi.class, monitoring.Monitoring.Kpi.Builder.class);
+              monitoring.Monitoring.KpiValueRange.class, monitoring.Monitoring.KpiValueRange.Builder.class);
     }
 
-    public static final int KPI_ID_FIELD_NUMBER = 1;
-    private monitoring.Monitoring.KpiId kpiId_;
+    public static final int KPIMINVALUE_FIELD_NUMBER = 1;
+    private monitoring.Monitoring.KpiValue kpiMinValue_;
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return Whether the kpiId field is set.
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+     * @return Whether the kpiMinValue field is set.
      */
     @java.lang.Override
-    public boolean hasKpiId() {
-      return kpiId_ != null;
+    public boolean hasKpiMinValue() {
+      return kpiMinValue_ != null;
     }
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return The kpiId.
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+     * @return The kpiMinValue.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiId getKpiId() {
-      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+    public monitoring.Monitoring.KpiValue getKpiMinValue() {
+      return kpiMinValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_;
     }
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-      return getKpiId();
+    public monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder() {
+      return getKpiMinValue();
     }
 
-    public static final int TIMESTAMP_FIELD_NUMBER = 2;
-    private volatile java.lang.Object timestamp_;
+    public static final int KPIMAXVALUE_FIELD_NUMBER = 2;
+    private monitoring.Monitoring.KpiValue kpiMaxValue_;
     /**
-     * <code>string timestamp = 2;</code>
-     * @return The timestamp.
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     * @return Whether the kpiMaxValue field is set.
      */
     @java.lang.Override
-    public java.lang.String getTimestamp() {
-      java.lang.Object ref = timestamp_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        timestamp_ = s;
-        return s;
-      }
+    public boolean hasKpiMaxValue() {
+      return kpiMaxValue_ != null;
     }
     /**
-     * <code>string timestamp = 2;</code>
-     * @return The bytes for timestamp.
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     * @return The kpiMaxValue.
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getTimestampBytes() {
-      java.lang.Object ref = timestamp_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        timestamp_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public monitoring.Monitoring.KpiValue getKpiMaxValue() {
+      return kpiMaxValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_;
+    }
+    /**
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder() {
+      return getKpiMaxValue();
     }
 
-    public static final int KPI_VALUE_FIELD_NUMBER = 3;
-    private monitoring.Monitoring.KpiValue kpiValue_;
+    public static final int INRANGE_FIELD_NUMBER = 3;
+    private boolean inRange_;
     /**
-     * <code>.monitoring.KpiValue kpi_value = 3;</code>
-     * @return Whether the kpiValue field is set.
+     * <pre>
+     * by default True
+     * </pre>
+     *
+     * <code>bool inRange = 3;</code>
+     * @return The inRange.
      */
     @java.lang.Override
-    public boolean hasKpiValue() {
-      return kpiValue_ != null;
+    public boolean getInRange() {
+      return inRange_;
     }
+
+    public static final int INCLUDEMINVALUE_FIELD_NUMBER = 4;
+    private boolean includeMinValue_;
     /**
-     * <code>.monitoring.KpiValue kpi_value = 3;</code>
-     * @return The kpiValue.
+     * <pre>
+     * False is outside the interval
+     * </pre>
+     *
+     * <code>bool includeMinValue = 4;</code>
+     * @return The includeMinValue.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiValue getKpiValue() {
-      return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+    public boolean getIncludeMinValue() {
+      return includeMinValue_;
     }
+
+    public static final int INCLUDEMAXVALUE_FIELD_NUMBER = 5;
+    private boolean includeMaxValue_;
     /**
-     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * <pre>
+     * False is outside the interval
+     * </pre>
+     *
+     * <code>bool includeMaxValue = 5;</code>
+     * @return The includeMaxValue.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder() {
-      return getKpiValue();
+    public boolean getIncludeMaxValue() {
+      return includeMaxValue_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -8493,14 +6358,20 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (kpiId_ != null) {
-        output.writeMessage(1, getKpiId());
+      if (kpiMinValue_ != null) {
+        output.writeMessage(1, getKpiMinValue());
       }
-      if (!getTimestampBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, timestamp_);
+      if (kpiMaxValue_ != null) {
+        output.writeMessage(2, getKpiMaxValue());
       }
-      if (kpiValue_ != null) {
-        output.writeMessage(3, getKpiValue());
+      if (inRange_ != false) {
+        output.writeBool(3, inRange_);
+      }
+      if (includeMinValue_ != false) {
+        output.writeBool(4, includeMinValue_);
+      }
+      if (includeMaxValue_ != false) {
+        output.writeBool(5, includeMaxValue_);
       }
       unknownFields.writeTo(output);
     }
@@ -8511,16 +6382,25 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (kpiId_ != null) {
+      if (kpiMinValue_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getKpiId());
+          .computeMessageSize(1, getKpiMinValue());
       }
-      if (!getTimestampBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, timestamp_);
+      if (kpiMaxValue_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getKpiMaxValue());
       }
-      if (kpiValue_ != null) {
+      if (inRange_ != false) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, getKpiValue());
+          .computeBoolSize(3, inRange_);
+      }
+      if (includeMinValue_ != false) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(4, includeMinValue_);
+      }
+      if (includeMaxValue_ != false) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(5, includeMaxValue_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -8532,23 +6412,27 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.Kpi)) {
+      if (!(obj instanceof monitoring.Monitoring.KpiValueRange)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.Kpi other = (monitoring.Monitoring.Kpi) obj;
+      monitoring.Monitoring.KpiValueRange other = (monitoring.Monitoring.KpiValueRange) obj;
 
-      if (hasKpiId() != other.hasKpiId()) return false;
-      if (hasKpiId()) {
-        if (!getKpiId()
-            .equals(other.getKpiId())) return false;
+      if (hasKpiMinValue() != other.hasKpiMinValue()) return false;
+      if (hasKpiMinValue()) {
+        if (!getKpiMinValue()
+            .equals(other.getKpiMinValue())) return false;
       }
-      if (!getTimestamp()
-          .equals(other.getTimestamp())) return false;
-      if (hasKpiValue() != other.hasKpiValue()) return false;
-      if (hasKpiValue()) {
-        if (!getKpiValue()
-            .equals(other.getKpiValue())) return false;
+      if (hasKpiMaxValue() != other.hasKpiMaxValue()) return false;
+      if (hasKpiMaxValue()) {
+        if (!getKpiMaxValue()
+            .equals(other.getKpiMaxValue())) return false;
       }
+      if (getInRange()
+          != other.getInRange()) return false;
+      if (getIncludeMinValue()
+          != other.getIncludeMinValue()) return false;
+      if (getIncludeMaxValue()
+          != other.getIncludeMaxValue()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -8560,84 +6444,91 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasKpiId()) {
-        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiId().hashCode();
+      if (hasKpiMinValue()) {
+        hash = (37 * hash) + KPIMINVALUE_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiMinValue().hashCode();
       }
-      hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
-      hash = (53 * hash) + getTimestamp().hashCode();
-      if (hasKpiValue()) {
-        hash = (37 * hash) + KPI_VALUE_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiValue().hashCode();
+      if (hasKpiMaxValue()) {
+        hash = (37 * hash) + KPIMAXVALUE_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiMaxValue().hashCode();
       }
+      hash = (37 * hash) + INRANGE_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getInRange());
+      hash = (37 * hash) + INCLUDEMINVALUE_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getIncludeMinValue());
+      hash = (37 * hash) + INCLUDEMAXVALUE_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getIncludeMaxValue());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(byte[] data)
+    public static monitoring.Monitoring.KpiValueRange parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiValueRange parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.Kpi parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiValueRange parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.Kpi parseDelimitedFrom(
+    public static monitoring.Monitoring.KpiValueRange parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -8650,7 +6541,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.Kpi prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.KpiValueRange prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -8666,26 +6557,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.Kpi}
+     * Protobuf type {@code monitoring.KpiValueRange}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.Kpi)
-        monitoring.Monitoring.KpiOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.KpiValueRange)
+        monitoring.Monitoring.KpiValueRangeOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_Kpi_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_Kpi_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.Kpi.class, monitoring.Monitoring.Kpi.Builder.class);
+                monitoring.Monitoring.KpiValueRange.class, monitoring.Monitoring.KpiValueRange.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.Kpi.newBuilder()
+      // Construct using monitoring.Monitoring.KpiValueRange.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -8703,37 +6594,41 @@ public final class Monitoring {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
+        if (kpiMinValueBuilder_ == null) {
+          kpiMinValue_ = null;
         } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
+          kpiMinValue_ = null;
+          kpiMinValueBuilder_ = null;
         }
-        timestamp_ = "";
-
-        if (kpiValueBuilder_ == null) {
-          kpiValue_ = null;
+        if (kpiMaxValueBuilder_ == null) {
+          kpiMaxValue_ = null;
         } else {
-          kpiValue_ = null;
-          kpiValueBuilder_ = null;
+          kpiMaxValue_ = null;
+          kpiMaxValueBuilder_ = null;
         }
+        inRange_ = false;
+
+        includeMinValue_ = false;
+
+        includeMaxValue_ = false;
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_Kpi_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.Kpi getDefaultInstanceForType() {
-        return monitoring.Monitoring.Kpi.getDefaultInstance();
+      public monitoring.Monitoring.KpiValueRange getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiValueRange.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.Kpi build() {
-        monitoring.Monitoring.Kpi result = buildPartial();
+      public monitoring.Monitoring.KpiValueRange build() {
+        monitoring.Monitoring.KpiValueRange result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -8741,19 +6636,21 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.Kpi buildPartial() {
-        monitoring.Monitoring.Kpi result = new monitoring.Monitoring.Kpi(this);
-        if (kpiIdBuilder_ == null) {
-          result.kpiId_ = kpiId_;
+      public monitoring.Monitoring.KpiValueRange buildPartial() {
+        monitoring.Monitoring.KpiValueRange result = new monitoring.Monitoring.KpiValueRange(this);
+        if (kpiMinValueBuilder_ == null) {
+          result.kpiMinValue_ = kpiMinValue_;
         } else {
-          result.kpiId_ = kpiIdBuilder_.build();
+          result.kpiMinValue_ = kpiMinValueBuilder_.build();
         }
-        result.timestamp_ = timestamp_;
-        if (kpiValueBuilder_ == null) {
-          result.kpiValue_ = kpiValue_;
+        if (kpiMaxValueBuilder_ == null) {
+          result.kpiMaxValue_ = kpiMaxValue_;
         } else {
-          result.kpiValue_ = kpiValueBuilder_.build();
+          result.kpiMaxValue_ = kpiMaxValueBuilder_.build();
         }
+        result.inRange_ = inRange_;
+        result.includeMinValue_ = includeMinValue_;
+        result.includeMaxValue_ = includeMaxValue_;
         onBuilt();
         return result;
       }
@@ -8792,25 +6689,30 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.Kpi) {
-          return mergeFrom((monitoring.Monitoring.Kpi)other);
+        if (other instanceof monitoring.Monitoring.KpiValueRange) {
+          return mergeFrom((monitoring.Monitoring.KpiValueRange)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.Kpi other) {
-        if (other == monitoring.Monitoring.Kpi.getDefaultInstance()) return this;
-        if (other.hasKpiId()) {
-          mergeKpiId(other.getKpiId());
+      public Builder mergeFrom(monitoring.Monitoring.KpiValueRange other) {
+        if (other == monitoring.Monitoring.KpiValueRange.getDefaultInstance()) return this;
+        if (other.hasKpiMinValue()) {
+          mergeKpiMinValue(other.getKpiMinValue());
         }
-        if (!other.getTimestamp().isEmpty()) {
-          timestamp_ = other.timestamp_;
-          onChanged();
+        if (other.hasKpiMaxValue()) {
+          mergeKpiMaxValue(other.getKpiMaxValue());
         }
-        if (other.hasKpiValue()) {
-          mergeKpiValue(other.getKpiValue());
+        if (other.getInRange() != false) {
+          setInRange(other.getInRange());
+        }
+        if (other.getIncludeMinValue() != false) {
+          setIncludeMinValue(other.getIncludeMinValue());
+        }
+        if (other.getIncludeMaxValue() != false) {
+          setIncludeMaxValue(other.getIncludeMaxValue());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -8827,11 +6729,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.Kpi parsedMessage = null;
+        monitoring.Monitoring.KpiValueRange parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.Kpi) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.KpiValueRange) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -8841,318 +6743,371 @@ public final class Monitoring {
         return this;
       }
 
-      private monitoring.Monitoring.KpiId kpiId_;
+      private monitoring.Monitoring.KpiValue kpiMinValue_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
+          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiMinValueBuilder_;
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       * @return Whether the kpiId field is set.
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       * @return Whether the kpiMinValue field is set.
        */
-      public boolean hasKpiId() {
-        return kpiIdBuilder_ != null || kpiId_ != null;
+      public boolean hasKpiMinValue() {
+        return kpiMinValueBuilder_ != null || kpiMinValue_ != null;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       * @return The kpiId.
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       * @return The kpiMinValue.
        */
-      public monitoring.Monitoring.KpiId getKpiId() {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+      public monitoring.Monitoring.KpiValue getKpiMinValue() {
+        if (kpiMinValueBuilder_ == null) {
+          return kpiMinValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_;
         } else {
-          return kpiIdBuilder_.getMessage();
+          return kpiMinValueBuilder_.getMessage();
         }
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
        */
-      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
+      public Builder setKpiMinValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiMinValueBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          kpiId_ = value;
+          kpiMinValue_ = value;
           onChanged();
         } else {
-          kpiIdBuilder_.setMessage(value);
+          kpiMinValueBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
        */
-      public Builder setKpiId(
-          monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = builderForValue.build();
+      public Builder setKpiMinValue(
+          monitoring.Monitoring.KpiValue.Builder builderForValue) {
+        if (kpiMinValueBuilder_ == null) {
+          kpiMinValue_ = builderForValue.build();
           onChanged();
         } else {
-          kpiIdBuilder_.setMessage(builderForValue.build());
+          kpiMinValueBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
        */
-      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (kpiId_ != null) {
-            kpiId_ =
-              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+      public Builder mergeKpiMinValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiMinValueBuilder_ == null) {
+          if (kpiMinValue_ != null) {
+            kpiMinValue_ =
+              monitoring.Monitoring.KpiValue.newBuilder(kpiMinValue_).mergeFrom(value).buildPartial();
           } else {
-            kpiId_ = value;
+            kpiMinValue_ = value;
           }
           onChanged();
         } else {
-          kpiIdBuilder_.mergeFrom(value);
+          kpiMinValueBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
        */
-      public Builder clearKpiId() {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
+      public Builder clearKpiMinValue() {
+        if (kpiMinValueBuilder_ == null) {
+          kpiMinValue_ = null;
           onChanged();
         } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
+          kpiMinValue_ = null;
+          kpiMinValueBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
        */
-      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
+      public monitoring.Monitoring.KpiValue.Builder getKpiMinValueBuilder() {
         
         onChanged();
-        return getKpiIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-        if (kpiIdBuilder_ != null) {
-          return kpiIdBuilder_.getMessageOrBuilder();
-        } else {
-          return kpiId_ == null ?
-              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
-        }
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
-          getKpiIdFieldBuilder() {
-        if (kpiIdBuilder_ == null) {
-          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
-                  getKpiId(),
-                  getParentForChildren(),
-                  isClean());
-          kpiId_ = null;
-        }
-        return kpiIdBuilder_;
-      }
-
-      private java.lang.Object timestamp_ = "";
-      /**
-       * <code>string timestamp = 2;</code>
-       * @return The timestamp.
-       */
-      public java.lang.String getTimestamp() {
-        java.lang.Object ref = timestamp_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          timestamp_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
+        return getKpiMinValueFieldBuilder().getBuilder();
       }
       /**
-       * <code>string timestamp = 2;</code>
-       * @return The bytes for timestamp.
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
        */
-      public com.google.protobuf.ByteString
-          getTimestampBytes() {
-        java.lang.Object ref = timestamp_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          timestamp_ = b;
-          return b;
+      public monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder() {
+        if (kpiMinValueBuilder_ != null) {
+          return kpiMinValueBuilder_.getMessageOrBuilder();
         } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       * <code>string timestamp = 2;</code>
-       * @param value The timestamp to set.
-       * @return This builder for chaining.
-       */
-      public Builder setTimestamp(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        timestamp_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string timestamp = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearTimestamp() {
-        
-        timestamp_ = getDefaultInstance().getTimestamp();
-        onChanged();
-        return this;
+          return kpiMinValue_ == null ?
+              monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_;
+        }
       }
       /**
-       * <code>string timestamp = 2;</code>
-       * @param value The bytes for timestamp to set.
-       * @return This builder for chaining.
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
        */
-      public Builder setTimestampBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        timestamp_ = value;
-        onChanged();
-        return this;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> 
+          getKpiMinValueFieldBuilder() {
+        if (kpiMinValueBuilder_ == null) {
+          kpiMinValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder>(
+                  getKpiMinValue(),
+                  getParentForChildren(),
+                  isClean());
+          kpiMinValue_ = null;
+        }
+        return kpiMinValueBuilder_;
       }
 
-      private monitoring.Monitoring.KpiValue kpiValue_;
+      private monitoring.Monitoring.KpiValue kpiMaxValue_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiValueBuilder_;
+          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiMaxValueBuilder_;
       /**
-       * <code>.monitoring.KpiValue kpi_value = 3;</code>
-       * @return Whether the kpiValue field is set.
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       * @return Whether the kpiMaxValue field is set.
        */
-      public boolean hasKpiValue() {
-        return kpiValueBuilder_ != null || kpiValue_ != null;
+      public boolean hasKpiMaxValue() {
+        return kpiMaxValueBuilder_ != null || kpiMaxValue_ != null;
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 3;</code>
-       * @return The kpiValue.
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       * @return The kpiMaxValue.
        */
-      public monitoring.Monitoring.KpiValue getKpiValue() {
-        if (kpiValueBuilder_ == null) {
-          return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+      public monitoring.Monitoring.KpiValue getKpiMaxValue() {
+        if (kpiMaxValueBuilder_ == null) {
+          return kpiMaxValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_;
         } else {
-          return kpiValueBuilder_.getMessage();
+          return kpiMaxValueBuilder_.getMessage();
         }
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
        */
-      public Builder setKpiValue(monitoring.Monitoring.KpiValue value) {
-        if (kpiValueBuilder_ == null) {
+      public Builder setKpiMaxValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiMaxValueBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          kpiValue_ = value;
+          kpiMaxValue_ = value;
           onChanged();
         } else {
-          kpiValueBuilder_.setMessage(value);
+          kpiMaxValueBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
        */
-      public Builder setKpiValue(
+      public Builder setKpiMaxValue(
           monitoring.Monitoring.KpiValue.Builder builderForValue) {
-        if (kpiValueBuilder_ == null) {
-          kpiValue_ = builderForValue.build();
+        if (kpiMaxValueBuilder_ == null) {
+          kpiMaxValue_ = builderForValue.build();
           onChanged();
         } else {
-          kpiValueBuilder_.setMessage(builderForValue.build());
+          kpiMaxValueBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
        */
-      public Builder mergeKpiValue(monitoring.Monitoring.KpiValue value) {
-        if (kpiValueBuilder_ == null) {
-          if (kpiValue_ != null) {
-            kpiValue_ =
-              monitoring.Monitoring.KpiValue.newBuilder(kpiValue_).mergeFrom(value).buildPartial();
+      public Builder mergeKpiMaxValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiMaxValueBuilder_ == null) {
+          if (kpiMaxValue_ != null) {
+            kpiMaxValue_ =
+              monitoring.Monitoring.KpiValue.newBuilder(kpiMaxValue_).mergeFrom(value).buildPartial();
           } else {
-            kpiValue_ = value;
+            kpiMaxValue_ = value;
           }
           onChanged();
         } else {
-          kpiValueBuilder_.mergeFrom(value);
+          kpiMaxValueBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
        */
-      public Builder clearKpiValue() {
-        if (kpiValueBuilder_ == null) {
-          kpiValue_ = null;
+      public Builder clearKpiMaxValue() {
+        if (kpiMaxValueBuilder_ == null) {
+          kpiMaxValue_ = null;
           onChanged();
         } else {
-          kpiValue_ = null;
-          kpiValueBuilder_ = null;
+          kpiMaxValue_ = null;
+          kpiMaxValueBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
        */
-      public monitoring.Monitoring.KpiValue.Builder getKpiValueBuilder() {
+      public monitoring.Monitoring.KpiValue.Builder getKpiMaxValueBuilder() {
         
         onChanged();
-        return getKpiValueFieldBuilder().getBuilder();
+        return getKpiMaxValueFieldBuilder().getBuilder();
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
        */
-      public monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder() {
-        if (kpiValueBuilder_ != null) {
-          return kpiValueBuilder_.getMessageOrBuilder();
+      public monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder() {
+        if (kpiMaxValueBuilder_ != null) {
+          return kpiMaxValueBuilder_.getMessageOrBuilder();
         } else {
-          return kpiValue_ == null ?
-              monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+          return kpiMaxValue_ == null ?
+              monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_;
         }
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
           monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> 
-          getKpiValueFieldBuilder() {
-        if (kpiValueBuilder_ == null) {
-          kpiValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+          getKpiMaxValueFieldBuilder() {
+        if (kpiMaxValueBuilder_ == null) {
+          kpiMaxValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
               monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder>(
-                  getKpiValue(),
+                  getKpiMaxValue(),
                   getParentForChildren(),
                   isClean());
-          kpiValue_ = null;
+          kpiMaxValue_ = null;
         }
-        return kpiValueBuilder_;
+        return kpiMaxValueBuilder_;
+      }
+
+      private boolean inRange_ ;
+      /**
+       * <pre>
+       * by default True
+       * </pre>
+       *
+       * <code>bool inRange = 3;</code>
+       * @return The inRange.
+       */
+      @java.lang.Override
+      public boolean getInRange() {
+        return inRange_;
+      }
+      /**
+       * <pre>
+       * by default True
+       * </pre>
+       *
+       * <code>bool inRange = 3;</code>
+       * @param value The inRange to set.
+       * @return This builder for chaining.
+       */
+      public Builder setInRange(boolean value) {
+        
+        inRange_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       * by default True
+       * </pre>
+       *
+       * <code>bool inRange = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearInRange() {
+        
+        inRange_ = false;
+        onChanged();
+        return this;
+      }
+
+      private boolean includeMinValue_ ;
+      /**
+       * <pre>
+       * False is outside the interval
+       * </pre>
+       *
+       * <code>bool includeMinValue = 4;</code>
+       * @return The includeMinValue.
+       */
+      @java.lang.Override
+      public boolean getIncludeMinValue() {
+        return includeMinValue_;
+      }
+      /**
+       * <pre>
+       * False is outside the interval
+       * </pre>
+       *
+       * <code>bool includeMinValue = 4;</code>
+       * @param value The includeMinValue to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIncludeMinValue(boolean value) {
+        
+        includeMinValue_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       * False is outside the interval
+       * </pre>
+       *
+       * <code>bool includeMinValue = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIncludeMinValue() {
+        
+        includeMinValue_ = false;
+        onChanged();
+        return this;
+      }
+
+      private boolean includeMaxValue_ ;
+      /**
+       * <pre>
+       * False is outside the interval
+       * </pre>
+       *
+       * <code>bool includeMaxValue = 5;</code>
+       * @return The includeMaxValue.
+       */
+      @java.lang.Override
+      public boolean getIncludeMaxValue() {
+        return includeMaxValue_;
+      }
+      /**
+       * <pre>
+       * False is outside the interval
+       * </pre>
+       *
+       * <code>bool includeMaxValue = 5;</code>
+       * @param value The includeMaxValue to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIncludeMaxValue(boolean value) {
+        
+        includeMaxValue_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       * False is outside the interval
+       * </pre>
+       *
+       * <code>bool includeMaxValue = 5;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIncludeMaxValue() {
+        
+        includeMaxValue_ = false;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -9167,100 +7122,155 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.Kpi)
+      // @@protoc_insertion_point(builder_scope:monitoring.KpiValueRange)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.Kpi)
-    private static final monitoring.Monitoring.Kpi DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.KpiValueRange)
+    private static final monitoring.Monitoring.KpiValueRange DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.Kpi();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiValueRange();
     }
 
-    public static monitoring.Monitoring.Kpi getDefaultInstance() {
+    public static monitoring.Monitoring.KpiValueRange getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Kpi>
-        PARSER = new com.google.protobuf.AbstractParser<Kpi>() {
+    private static final com.google.protobuf.Parser<KpiValueRange>
+        PARSER = new com.google.protobuf.AbstractParser<KpiValueRange>() {
       @java.lang.Override
-      public Kpi parsePartialFrom(
+      public KpiValueRange parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Kpi(input, extensionRegistry);
+        return new KpiValueRange(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Kpi> parser() {
+    public static com.google.protobuf.Parser<KpiValueRange> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Kpi> getParserForType() {
+    public com.google.protobuf.Parser<KpiValueRange> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.Kpi getDefaultInstanceForType() {
+    public monitoring.Monitoring.KpiValueRange getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface KpiValueRangeOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.KpiValueRange)
+  public interface KpiValueOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiValue)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-     * @return Whether the kpiMinValue field is set.
+     * <code>int32 int32Val = 1;</code>
+     * @return Whether the int32Val field is set.
+     */
+    boolean hasInt32Val();
+    /**
+     * <code>int32 int32Val = 1;</code>
+     * @return The int32Val.
+     */
+    int getInt32Val();
+
+    /**
+     * <code>uint32 uint32Val = 2;</code>
+     * @return Whether the uint32Val field is set.
+     */
+    boolean hasUint32Val();
+    /**
+     * <code>uint32 uint32Val = 2;</code>
+     * @return The uint32Val.
+     */
+    int getUint32Val();
+
+    /**
+     * <code>int64 int64Val = 3;</code>
+     * @return Whether the int64Val field is set.
+     */
+    boolean hasInt64Val();
+    /**
+     * <code>int64 int64Val = 3;</code>
+     * @return The int64Val.
+     */
+    long getInt64Val();
+
+    /**
+     * <code>uint64 uint64Val = 4;</code>
+     * @return Whether the uint64Val field is set.
      */
-    boolean hasKpiMinValue();
+    boolean hasUint64Val();
     /**
-     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-     * @return The kpiMinValue.
+     * <code>uint64 uint64Val = 4;</code>
+     * @return The uint64Val.
      */
-    monitoring.Monitoring.KpiValue getKpiMinValue();
+    long getUint64Val();
+
     /**
-     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+     * <code>float floatVal = 5;</code>
+     * @return Whether the floatVal field is set.
      */
-    monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder();
+    boolean hasFloatVal();
+    /**
+     * <code>float floatVal = 5;</code>
+     * @return The floatVal.
+     */
+    float getFloatVal();
 
     /**
-     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-     * @return Whether the kpiMaxValue field is set.
+     * <code>string stringVal = 6;</code>
+     * @return Whether the stringVal field is set.
      */
-    boolean hasKpiMaxValue();
+    boolean hasStringVal();
     /**
-     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-     * @return The kpiMaxValue.
+     * <code>string stringVal = 6;</code>
+     * @return The stringVal.
      */
-    monitoring.Monitoring.KpiValue getKpiMaxValue();
+    java.lang.String getStringVal();
     /**
-     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     * <code>string stringVal = 6;</code>
+     * @return The bytes for stringVal.
      */
-    monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder();
+    com.google.protobuf.ByteString
+        getStringValBytes();
+
+    /**
+     * <code>bool boolVal = 7;</code>
+     * @return Whether the boolVal field is set.
+     */
+    boolean hasBoolVal();
+    /**
+     * <code>bool boolVal = 7;</code>
+     * @return The boolVal.
+     */
+    boolean getBoolVal();
+
+    public monitoring.Monitoring.KpiValue.ValueCase getValueCase();
   }
   /**
-   * Protobuf type {@code monitoring.KpiValueRange}
+   * Protobuf type {@code monitoring.KpiValue}
    */
-  public static final class KpiValueRange extends
+  public static final class KpiValue extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.KpiValueRange)
-      KpiValueRangeOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.KpiValue)
+      KpiValueOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use KpiValueRange.newBuilder() to construct.
-    private KpiValueRange(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use KpiValue.newBuilder() to construct.
+    private KpiValue(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private KpiValueRange() {
+    private KpiValue() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new KpiValueRange();
+      return new KpiValue();
     }
 
     @java.lang.Override
@@ -9268,7 +7278,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private KpiValueRange(
+    private KpiValue(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -9286,30 +7296,40 @@ public final class Monitoring {
             case 0:
               done = true;
               break;
-            case 10: {
-              monitoring.Monitoring.KpiValue.Builder subBuilder = null;
-              if (kpiMinValue_ != null) {
-                subBuilder = kpiMinValue_.toBuilder();
-              }
-              kpiMinValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(kpiMinValue_);
-                kpiMinValue_ = subBuilder.buildPartial();
-              }
-
+            case 8: {
+              valueCase_ = 1;
+              value_ = input.readInt32();
               break;
             }
-            case 18: {
-              monitoring.Monitoring.KpiValue.Builder subBuilder = null;
-              if (kpiMaxValue_ != null) {
-                subBuilder = kpiMaxValue_.toBuilder();
-              }
-              kpiMaxValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(kpiMaxValue_);
-                kpiMaxValue_ = subBuilder.buildPartial();
-              }
-
+            case 16: {
+              valueCase_ = 2;
+              value_ = input.readUInt32();
+              break;
+            }
+            case 24: {
+              valueCase_ = 3;
+              value_ = input.readInt64();
+              break;
+            }
+            case 32: {
+              valueCase_ = 4;
+              value_ = input.readUInt64();
+              break;
+            }
+            case 45: {
+              valueCase_ = 5;
+              value_ = input.readFloat();
+              break;
+            }
+            case 50: {
+              java.lang.String s = input.readStringRequireUtf8();
+              valueCase_ = 6;
+              value_ = s;
+              break;
+            }
+            case 56: {
+              valueCase_ = 7;
+              value_ = input.readBool();
               break;
             }
             default: {
@@ -9333,67 +7353,244 @@ public final class Monitoring {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_KpiValue_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.KpiValueRange.class, monitoring.Monitoring.KpiValueRange.Builder.class);
+              monitoring.Monitoring.KpiValue.class, monitoring.Monitoring.KpiValue.Builder.class);
     }
 
-    public static final int KPIMINVALUE_FIELD_NUMBER = 1;
-    private monitoring.Monitoring.KpiValue kpiMinValue_;
+    private int valueCase_ = 0;
+    private java.lang.Object value_;
+    public enum ValueCase
+        implements com.google.protobuf.Internal.EnumLite,
+            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+      INT32VAL(1),
+      UINT32VAL(2),
+      INT64VAL(3),
+      UINT64VAL(4),
+      FLOATVAL(5),
+      STRINGVAL(6),
+      BOOLVAL(7),
+      VALUE_NOT_SET(0);
+      private final int value;
+      private ValueCase(int value) {
+        this.value = value;
+      }
+      /**
+       * @param value The number of the enum to look for.
+       * @return The enum associated with the given number.
+       * @deprecated Use {@link #forNumber(int)} instead.
+       */
+      @java.lang.Deprecated
+      public static ValueCase valueOf(int value) {
+        return forNumber(value);
+      }
+
+      public static ValueCase forNumber(int value) {
+        switch (value) {
+          case 1: return INT32VAL;
+          case 2: return UINT32VAL;
+          case 3: return INT64VAL;
+          case 4: return UINT64VAL;
+          case 5: return FLOATVAL;
+          case 6: return STRINGVAL;
+          case 7: return BOOLVAL;
+          case 0: return VALUE_NOT_SET;
+          default: return null;
+        }
+      }
+      public int getNumber() {
+        return this.value;
+      }
+    };
+
+    public ValueCase
+    getValueCase() {
+      return ValueCase.forNumber(
+          valueCase_);
+    }
+
+    public static final int INT32VAL_FIELD_NUMBER = 1;
     /**
-     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-     * @return Whether the kpiMinValue field is set.
+     * <code>int32 int32Val = 1;</code>
+     * @return Whether the int32Val field is set.
      */
     @java.lang.Override
-    public boolean hasKpiMinValue() {
-      return kpiMinValue_ != null;
+    public boolean hasInt32Val() {
+      return valueCase_ == 1;
     }
     /**
-     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-     * @return The kpiMinValue.
+     * <code>int32 int32Val = 1;</code>
+     * @return The int32Val.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiValue getKpiMinValue() {
-      return kpiMinValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_;
+    public int getInt32Val() {
+      if (valueCase_ == 1) {
+        return (java.lang.Integer) value_;
+      }
+      return 0;
     }
+
+    public static final int UINT32VAL_FIELD_NUMBER = 2;
     /**
-     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+     * <code>uint32 uint32Val = 2;</code>
+     * @return Whether the uint32Val field is set.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder() {
-      return getKpiMinValue();
+    public boolean hasUint32Val() {
+      return valueCase_ == 2;
+    }
+    /**
+     * <code>uint32 uint32Val = 2;</code>
+     * @return The uint32Val.
+     */
+    @java.lang.Override
+    public int getUint32Val() {
+      if (valueCase_ == 2) {
+        return (java.lang.Integer) value_;
+      }
+      return 0;
     }
 
-    public static final int KPIMAXVALUE_FIELD_NUMBER = 2;
-    private monitoring.Monitoring.KpiValue kpiMaxValue_;
+    public static final int INT64VAL_FIELD_NUMBER = 3;
     /**
-     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-     * @return Whether the kpiMaxValue field is set.
+     * <code>int64 int64Val = 3;</code>
+     * @return Whether the int64Val field is set.
      */
     @java.lang.Override
-    public boolean hasKpiMaxValue() {
-      return kpiMaxValue_ != null;
+    public boolean hasInt64Val() {
+      return valueCase_ == 3;
+    }
+    /**
+     * <code>int64 int64Val = 3;</code>
+     * @return The int64Val.
+     */
+    @java.lang.Override
+    public long getInt64Val() {
+      if (valueCase_ == 3) {
+        return (java.lang.Long) value_;
+      }
+      return 0L;
+    }
+
+    public static final int UINT64VAL_FIELD_NUMBER = 4;
+    /**
+     * <code>uint64 uint64Val = 4;</code>
+     * @return Whether the uint64Val field is set.
+     */
+    @java.lang.Override
+    public boolean hasUint64Val() {
+      return valueCase_ == 4;
+    }
+    /**
+     * <code>uint64 uint64Val = 4;</code>
+     * @return The uint64Val.
+     */
+    @java.lang.Override
+    public long getUint64Val() {
+      if (valueCase_ == 4) {
+        return (java.lang.Long) value_;
+      }
+      return 0L;
+    }
+
+    public static final int FLOATVAL_FIELD_NUMBER = 5;
+    /**
+     * <code>float floatVal = 5;</code>
+     * @return Whether the floatVal field is set.
+     */
+    @java.lang.Override
+    public boolean hasFloatVal() {
+      return valueCase_ == 5;
+    }
+    /**
+     * <code>float floatVal = 5;</code>
+     * @return The floatVal.
+     */
+    @java.lang.Override
+    public float getFloatVal() {
+      if (valueCase_ == 5) {
+        return (java.lang.Float) value_;
+      }
+      return 0F;
+    }
+
+    public static final int STRINGVAL_FIELD_NUMBER = 6;
+    /**
+     * <code>string stringVal = 6;</code>
+     * @return Whether the stringVal field is set.
+     */
+    public boolean hasStringVal() {
+      return valueCase_ == 6;
+    }
+    /**
+     * <code>string stringVal = 6;</code>
+     * @return The stringVal.
+     */
+    public java.lang.String getStringVal() {
+      java.lang.Object ref = "";
+      if (valueCase_ == 6) {
+        ref = value_;
+      }
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (valueCase_ == 6) {
+          value_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>string stringVal = 6;</code>
+     * @return The bytes for stringVal.
+     */
+    public com.google.protobuf.ByteString
+        getStringValBytes() {
+      java.lang.Object ref = "";
+      if (valueCase_ == 6) {
+        ref = value_;
+      }
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        if (valueCase_ == 6) {
+          value_ = b;
+        }
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
+
+    public static final int BOOLVAL_FIELD_NUMBER = 7;
     /**
-     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-     * @return The kpiMaxValue.
+     * <code>bool boolVal = 7;</code>
+     * @return Whether the boolVal field is set.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiValue getKpiMaxValue() {
-      return kpiMaxValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_;
+    public boolean hasBoolVal() {
+      return valueCase_ == 7;
     }
     /**
-     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     * <code>bool boolVal = 7;</code>
+     * @return The boolVal.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder() {
-      return getKpiMaxValue();
+    public boolean getBoolVal() {
+      if (valueCase_ == 7) {
+        return (java.lang.Boolean) value_;
+      }
+      return false;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -9410,11 +7607,32 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (kpiMinValue_ != null) {
-        output.writeMessage(1, getKpiMinValue());
+      if (valueCase_ == 1) {
+        output.writeInt32(
+            1, (int)((java.lang.Integer) value_));
       }
-      if (kpiMaxValue_ != null) {
-        output.writeMessage(2, getKpiMaxValue());
+      if (valueCase_ == 2) {
+        output.writeUInt32(
+            2, (int)((java.lang.Integer) value_));
+      }
+      if (valueCase_ == 3) {
+        output.writeInt64(
+            3, (long)((java.lang.Long) value_));
+      }
+      if (valueCase_ == 4) {
+        output.writeUInt64(
+            4, (long)((java.lang.Long) value_));
+      }
+      if (valueCase_ == 5) {
+        output.writeFloat(
+            5, (float)((java.lang.Float) value_));
+      }
+      if (valueCase_ == 6) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, value_);
+      }
+      if (valueCase_ == 7) {
+        output.writeBool(
+            7, (boolean)((java.lang.Boolean) value_));
       }
       unknownFields.writeTo(output);
     }
@@ -9425,13 +7643,38 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (kpiMinValue_ != null) {
+      if (valueCase_ == 1) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getKpiMinValue());
+          .computeInt32Size(
+              1, (int)((java.lang.Integer) value_));
       }
-      if (kpiMaxValue_ != null) {
+      if (valueCase_ == 2) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getKpiMaxValue());
+          .computeUInt32Size(
+              2, (int)((java.lang.Integer) value_));
+      }
+      if (valueCase_ == 3) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(
+              3, (long)((java.lang.Long) value_));
+      }
+      if (valueCase_ == 4) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt64Size(
+              4, (long)((java.lang.Long) value_));
+      }
+      if (valueCase_ == 5) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(
+              5, (float)((java.lang.Float) value_));
+      }
+      if (valueCase_ == 6) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, value_);
+      }
+      if (valueCase_ == 7) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(
+              7, (boolean)((java.lang.Boolean) value_));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -9443,20 +7686,44 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.KpiValueRange)) {
+      if (!(obj instanceof monitoring.Monitoring.KpiValue)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.KpiValueRange other = (monitoring.Monitoring.KpiValueRange) obj;
+      monitoring.Monitoring.KpiValue other = (monitoring.Monitoring.KpiValue) obj;
 
-      if (hasKpiMinValue() != other.hasKpiMinValue()) return false;
-      if (hasKpiMinValue()) {
-        if (!getKpiMinValue()
-            .equals(other.getKpiMinValue())) return false;
-      }
-      if (hasKpiMaxValue() != other.hasKpiMaxValue()) return false;
-      if (hasKpiMaxValue()) {
-        if (!getKpiMaxValue()
-            .equals(other.getKpiMaxValue())) return false;
+      if (!getValueCase().equals(other.getValueCase())) return false;
+      switch (valueCase_) {
+        case 1:
+          if (getInt32Val()
+              != other.getInt32Val()) return false;
+          break;
+        case 2:
+          if (getUint32Val()
+              != other.getUint32Val()) return false;
+          break;
+        case 3:
+          if (getInt64Val()
+              != other.getInt64Val()) return false;
+          break;
+        case 4:
+          if (getUint64Val()
+              != other.getUint64Val()) return false;
+          break;
+        case 5:
+          if (java.lang.Float.floatToIntBits(getFloatVal())
+              != java.lang.Float.floatToIntBits(
+                  other.getFloatVal())) return false;
+          break;
+        case 6:
+          if (!getStringVal()
+              .equals(other.getStringVal())) return false;
+          break;
+        case 7:
+          if (getBoolVal()
+              != other.getBoolVal()) return false;
+          break;
+        case 0:
+        default:
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -9469,82 +7736,110 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasKpiMinValue()) {
-        hash = (37 * hash) + KPIMINVALUE_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiMinValue().hashCode();
-      }
-      if (hasKpiMaxValue()) {
-        hash = (37 * hash) + KPIMAXVALUE_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiMaxValue().hashCode();
+      switch (valueCase_) {
+        case 1:
+          hash = (37 * hash) + INT32VAL_FIELD_NUMBER;
+          hash = (53 * hash) + getInt32Val();
+          break;
+        case 2:
+          hash = (37 * hash) + UINT32VAL_FIELD_NUMBER;
+          hash = (53 * hash) + getUint32Val();
+          break;
+        case 3:
+          hash = (37 * hash) + INT64VAL_FIELD_NUMBER;
+          hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+              getInt64Val());
+          break;
+        case 4:
+          hash = (37 * hash) + UINT64VAL_FIELD_NUMBER;
+          hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+              getUint64Val());
+          break;
+        case 5:
+          hash = (37 * hash) + FLOATVAL_FIELD_NUMBER;
+          hash = (53 * hash) + java.lang.Float.floatToIntBits(
+              getFloatVal());
+          break;
+        case 6:
+          hash = (37 * hash) + STRINGVAL_FIELD_NUMBER;
+          hash = (53 * hash) + getStringVal().hashCode();
+          break;
+        case 7:
+          hash = (37 * hash) + BOOLVAL_FIELD_NUMBER;
+          hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+              getBoolVal());
+          break;
+        case 0:
+        default:
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.KpiValueRange parseFrom(
+    public static monitoring.Monitoring.KpiValue parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiValueRange parseFrom(
+    public static monitoring.Monitoring.KpiValue parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValueRange parseFrom(
+    public static monitoring.Monitoring.KpiValue parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiValueRange parseFrom(
+    public static monitoring.Monitoring.KpiValue parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValueRange parseFrom(byte[] data)
+    public static monitoring.Monitoring.KpiValue parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiValueRange parseFrom(
+    public static monitoring.Monitoring.KpiValue parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValueRange parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiValue parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiValueRange parseFrom(
+    public static monitoring.Monitoring.KpiValue parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValueRange parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiValue parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiValueRange parseDelimitedFrom(
+    public static monitoring.Monitoring.KpiValue parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValueRange parseFrom(
+    public static monitoring.Monitoring.KpiValue parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiValueRange parseFrom(
+    public static monitoring.Monitoring.KpiValue parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -9557,7 +7852,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.KpiValueRange prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.KpiValue prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -9573,26 +7868,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.KpiValueRange}
+     * Protobuf type {@code monitoring.KpiValue}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.KpiValueRange)
-        monitoring.Monitoring.KpiValueRangeOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.KpiValue)
+        monitoring.Monitoring.KpiValueOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_KpiValue_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.KpiValueRange.class, monitoring.Monitoring.KpiValueRange.Builder.class);
+                monitoring.Monitoring.KpiValue.class, monitoring.Monitoring.KpiValue.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.KpiValueRange.newBuilder()
+      // Construct using monitoring.Monitoring.KpiValue.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -9610,35 +7905,25 @@ public final class Monitoring {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (kpiMinValueBuilder_ == null) {
-          kpiMinValue_ = null;
-        } else {
-          kpiMinValue_ = null;
-          kpiMinValueBuilder_ = null;
-        }
-        if (kpiMaxValueBuilder_ == null) {
-          kpiMaxValue_ = null;
-        } else {
-          kpiMaxValue_ = null;
-          kpiMaxValueBuilder_ = null;
-        }
+        valueCase_ = 0;
+        value_ = null;
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiValueRange getDefaultInstanceForType() {
-        return monitoring.Monitoring.KpiValueRange.getDefaultInstance();
+      public monitoring.Monitoring.KpiValue getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiValue.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiValueRange build() {
-        monitoring.Monitoring.KpiValueRange result = buildPartial();
+      public monitoring.Monitoring.KpiValue build() {
+        monitoring.Monitoring.KpiValue result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -9646,18 +7931,30 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiValueRange buildPartial() {
-        monitoring.Monitoring.KpiValueRange result = new monitoring.Monitoring.KpiValueRange(this);
-        if (kpiMinValueBuilder_ == null) {
-          result.kpiMinValue_ = kpiMinValue_;
-        } else {
-          result.kpiMinValue_ = kpiMinValueBuilder_.build();
+      public monitoring.Monitoring.KpiValue buildPartial() {
+        monitoring.Monitoring.KpiValue result = new monitoring.Monitoring.KpiValue(this);
+        if (valueCase_ == 1) {
+          result.value_ = value_;
         }
-        if (kpiMaxValueBuilder_ == null) {
-          result.kpiMaxValue_ = kpiMaxValue_;
-        } else {
-          result.kpiMaxValue_ = kpiMaxValueBuilder_.build();
+        if (valueCase_ == 2) {
+          result.value_ = value_;
+        }
+        if (valueCase_ == 3) {
+          result.value_ = value_;
+        }
+        if (valueCase_ == 4) {
+          result.value_ = value_;
+        }
+        if (valueCase_ == 5) {
+          result.value_ = value_;
+        }
+        if (valueCase_ == 6) {
+          result.value_ = value_;
+        }
+        if (valueCase_ == 7) {
+          result.value_ = value_;
         }
+        result.valueCase_ = valueCase_;
         onBuilt();
         return result;
       }
@@ -9696,21 +7993,50 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.KpiValueRange) {
-          return mergeFrom((monitoring.Monitoring.KpiValueRange)other);
+        if (other instanceof monitoring.Monitoring.KpiValue) {
+          return mergeFrom((monitoring.Monitoring.KpiValue)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.KpiValueRange other) {
-        if (other == monitoring.Monitoring.KpiValueRange.getDefaultInstance()) return this;
-        if (other.hasKpiMinValue()) {
-          mergeKpiMinValue(other.getKpiMinValue());
-        }
-        if (other.hasKpiMaxValue()) {
-          mergeKpiMaxValue(other.getKpiMaxValue());
+      public Builder mergeFrom(monitoring.Monitoring.KpiValue other) {
+        if (other == monitoring.Monitoring.KpiValue.getDefaultInstance()) return this;
+        switch (other.getValueCase()) {
+          case INT32VAL: {
+            setInt32Val(other.getInt32Val());
+            break;
+          }
+          case UINT32VAL: {
+            setUint32Val(other.getUint32Val());
+            break;
+          }
+          case INT64VAL: {
+            setInt64Val(other.getInt64Val());
+            break;
+          }
+          case UINT64VAL: {
+            setUint64Val(other.getUint64Val());
+            break;
+          }
+          case FLOATVAL: {
+            setFloatVal(other.getFloatVal());
+            break;
+          }
+          case STRINGVAL: {
+            valueCase_ = 6;
+            value_ = other.value_;
+            onChanged();
+            break;
+          }
+          case BOOLVAL: {
+            setBoolVal(other.getBoolVal());
+            break;
+          }
+          case VALUE_NOT_SET: {
+            break;
+          }
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -9727,11 +8053,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.KpiValueRange parsedMessage = null;
+        monitoring.Monitoring.KpiValue parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.KpiValueRange) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.KpiValue) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -9740,243 +8066,363 @@ public final class Monitoring {
         }
         return this;
       }
+      private int valueCase_ = 0;
+      private java.lang.Object value_;
+      public ValueCase
+          getValueCase() {
+        return ValueCase.forNumber(
+            valueCase_);
+      }
+
+      public Builder clearValue() {
+        valueCase_ = 0;
+        value_ = null;
+        onChanged();
+        return this;
+      }
+
 
-      private monitoring.Monitoring.KpiValue kpiMinValue_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiMinValueBuilder_;
       /**
-       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-       * @return Whether the kpiMinValue field is set.
+       * <code>int32 int32Val = 1;</code>
+       * @return Whether the int32Val field is set.
        */
-      public boolean hasKpiMinValue() {
-        return kpiMinValueBuilder_ != null || kpiMinValue_ != null;
+      public boolean hasInt32Val() {
+        return valueCase_ == 1;
       }
       /**
-       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
-       * @return The kpiMinValue.
+       * <code>int32 int32Val = 1;</code>
+       * @return The int32Val.
        */
-      public monitoring.Monitoring.KpiValue getKpiMinValue() {
-        if (kpiMinValueBuilder_ == null) {
-          return kpiMinValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_;
-        } else {
-          return kpiMinValueBuilder_.getMessage();
+      public int getInt32Val() {
+        if (valueCase_ == 1) {
+          return (java.lang.Integer) value_;
         }
+        return 0;
       }
       /**
-       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       * <code>int32 int32Val = 1;</code>
+       * @param value The int32Val to set.
+       * @return This builder for chaining.
        */
-      public Builder setKpiMinValue(monitoring.Monitoring.KpiValue value) {
-        if (kpiMinValueBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          kpiMinValue_ = value;
-          onChanged();
-        } else {
-          kpiMinValueBuilder_.setMessage(value);
-        }
-
+      public Builder setInt32Val(int value) {
+        valueCase_ = 1;
+        value_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       * <code>int32 int32Val = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder setKpiMinValue(
-          monitoring.Monitoring.KpiValue.Builder builderForValue) {
-        if (kpiMinValueBuilder_ == null) {
-          kpiMinValue_ = builderForValue.build();
+      public Builder clearInt32Val() {
+        if (valueCase_ == 1) {
+          valueCase_ = 0;
+          value_ = null;
           onChanged();
-        } else {
-          kpiMinValueBuilder_.setMessage(builderForValue.build());
         }
+        return this;
+      }
 
+      /**
+       * <code>uint32 uint32Val = 2;</code>
+       * @return Whether the uint32Val field is set.
+       */
+      public boolean hasUint32Val() {
+        return valueCase_ == 2;
+      }
+      /**
+       * <code>uint32 uint32Val = 2;</code>
+       * @return The uint32Val.
+       */
+      public int getUint32Val() {
+        if (valueCase_ == 2) {
+          return (java.lang.Integer) value_;
+        }
+        return 0;
+      }
+      /**
+       * <code>uint32 uint32Val = 2;</code>
+       * @param value The uint32Val to set.
+       * @return This builder for chaining.
+       */
+      public Builder setUint32Val(int value) {
+        valueCase_ = 2;
+        value_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       * <code>uint32 uint32Val = 2;</code>
+       * @return This builder for chaining.
        */
-      public Builder mergeKpiMinValue(monitoring.Monitoring.KpiValue value) {
-        if (kpiMinValueBuilder_ == null) {
-          if (kpiMinValue_ != null) {
-            kpiMinValue_ =
-              monitoring.Monitoring.KpiValue.newBuilder(kpiMinValue_).mergeFrom(value).buildPartial();
-          } else {
-            kpiMinValue_ = value;
-          }
+      public Builder clearUint32Val() {
+        if (valueCase_ == 2) {
+          valueCase_ = 0;
+          value_ = null;
           onChanged();
-        } else {
-          kpiMinValueBuilder_.mergeFrom(value);
         }
+        return this;
+      }
 
+      /**
+       * <code>int64 int64Val = 3;</code>
+       * @return Whether the int64Val field is set.
+       */
+      public boolean hasInt64Val() {
+        return valueCase_ == 3;
+      }
+      /**
+       * <code>int64 int64Val = 3;</code>
+       * @return The int64Val.
+       */
+      public long getInt64Val() {
+        if (valueCase_ == 3) {
+          return (java.lang.Long) value_;
+        }
+        return 0L;
+      }
+      /**
+       * <code>int64 int64Val = 3;</code>
+       * @param value The int64Val to set.
+       * @return This builder for chaining.
+       */
+      public Builder setInt64Val(long value) {
+        valueCase_ = 3;
+        value_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       * <code>int64 int64Val = 3;</code>
+       * @return This builder for chaining.
        */
-      public Builder clearKpiMinValue() {
-        if (kpiMinValueBuilder_ == null) {
-          kpiMinValue_ = null;
+      public Builder clearInt64Val() {
+        if (valueCase_ == 3) {
+          valueCase_ = 0;
+          value_ = null;
           onChanged();
-        } else {
-          kpiMinValue_ = null;
-          kpiMinValueBuilder_ = null;
         }
-
         return this;
       }
+
       /**
-       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       * <code>uint64 uint64Val = 4;</code>
+       * @return Whether the uint64Val field is set.
        */
-      public monitoring.Monitoring.KpiValue.Builder getKpiMinValueBuilder() {
-        
-        onChanged();
-        return getKpiMinValueFieldBuilder().getBuilder();
+      public boolean hasUint64Val() {
+        return valueCase_ == 4;
       }
       /**
-       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       * <code>uint64 uint64Val = 4;</code>
+       * @return The uint64Val.
        */
-      public monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder() {
-        if (kpiMinValueBuilder_ != null) {
-          return kpiMinValueBuilder_.getMessageOrBuilder();
-        } else {
-          return kpiMinValue_ == null ?
-              monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_;
+      public long getUint64Val() {
+        if (valueCase_ == 4) {
+          return (java.lang.Long) value_;
         }
+        return 0L;
       }
       /**
-       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       * <code>uint64 uint64Val = 4;</code>
+       * @param value The uint64Val to set.
+       * @return This builder for chaining.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> 
-          getKpiMinValueFieldBuilder() {
-        if (kpiMinValueBuilder_ == null) {
-          kpiMinValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder>(
-                  getKpiMinValue(),
-                  getParentForChildren(),
-                  isClean());
-          kpiMinValue_ = null;
+      public Builder setUint64Val(long value) {
+        valueCase_ = 4;
+        value_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint64 uint64Val = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearUint64Val() {
+        if (valueCase_ == 4) {
+          valueCase_ = 0;
+          value_ = null;
+          onChanged();
         }
-        return kpiMinValueBuilder_;
+        return this;
       }
 
-      private monitoring.Monitoring.KpiValue kpiMaxValue_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiMaxValueBuilder_;
       /**
-       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-       * @return Whether the kpiMaxValue field is set.
+       * <code>float floatVal = 5;</code>
+       * @return Whether the floatVal field is set.
        */
-      public boolean hasKpiMaxValue() {
-        return kpiMaxValueBuilder_ != null || kpiMaxValue_ != null;
+      public boolean hasFloatVal() {
+        return valueCase_ == 5;
       }
       /**
-       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
-       * @return The kpiMaxValue.
+       * <code>float floatVal = 5;</code>
+       * @return The floatVal.
        */
-      public monitoring.Monitoring.KpiValue getKpiMaxValue() {
-        if (kpiMaxValueBuilder_ == null) {
-          return kpiMaxValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_;
-        } else {
-          return kpiMaxValueBuilder_.getMessage();
+      public float getFloatVal() {
+        if (valueCase_ == 5) {
+          return (java.lang.Float) value_;
         }
+        return 0F;
       }
       /**
-       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       * <code>float floatVal = 5;</code>
+       * @param value The floatVal to set.
+       * @return This builder for chaining.
        */
-      public Builder setKpiMaxValue(monitoring.Monitoring.KpiValue value) {
-        if (kpiMaxValueBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          kpiMaxValue_ = value;
+      public Builder setFloatVal(float value) {
+        valueCase_ = 5;
+        value_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>float floatVal = 5;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearFloatVal() {
+        if (valueCase_ == 5) {
+          valueCase_ = 0;
+          value_ = null;
           onChanged();
-        } else {
-          kpiMaxValueBuilder_.setMessage(value);
         }
-
         return this;
       }
+
+      /**
+       * <code>string stringVal = 6;</code>
+       * @return Whether the stringVal field is set.
+       */
+      @java.lang.Override
+      public boolean hasStringVal() {
+        return valueCase_ == 6;
+      }
       /**
-       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       * <code>string stringVal = 6;</code>
+       * @return The stringVal.
        */
-      public Builder setKpiMaxValue(
-          monitoring.Monitoring.KpiValue.Builder builderForValue) {
-        if (kpiMaxValueBuilder_ == null) {
-          kpiMaxValue_ = builderForValue.build();
-          onChanged();
+      @java.lang.Override
+      public java.lang.String getStringVal() {
+        java.lang.Object ref = "";
+        if (valueCase_ == 6) {
+          ref = value_;
+        }
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          if (valueCase_ == 6) {
+            value_ = s;
+          }
+          return s;
         } else {
-          kpiMaxValueBuilder_.setMessage(builderForValue.build());
+          return (java.lang.String) ref;
         }
-
-        return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       * <code>string stringVal = 6;</code>
+       * @return The bytes for stringVal.
        */
-      public Builder mergeKpiMaxValue(monitoring.Monitoring.KpiValue value) {
-        if (kpiMaxValueBuilder_ == null) {
-          if (kpiMaxValue_ != null) {
-            kpiMaxValue_ =
-              monitoring.Monitoring.KpiValue.newBuilder(kpiMaxValue_).mergeFrom(value).buildPartial();
-          } else {
-            kpiMaxValue_ = value;
+      @java.lang.Override
+      public com.google.protobuf.ByteString
+          getStringValBytes() {
+        java.lang.Object ref = "";
+        if (valueCase_ == 6) {
+          ref = value_;
+        }
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          if (valueCase_ == 6) {
+            value_ = b;
           }
-          onChanged();
+          return b;
         } else {
-          kpiMaxValueBuilder_.mergeFrom(value);
+          return (com.google.protobuf.ByteString) ref;
         }
-
+      }
+      /**
+       * <code>string stringVal = 6;</code>
+       * @param value The stringVal to set.
+       * @return This builder for chaining.
+       */
+      public Builder setStringVal(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  valueCase_ = 6;
+        value_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       * <code>string stringVal = 6;</code>
+       * @return This builder for chaining.
        */
-      public Builder clearKpiMaxValue() {
-        if (kpiMaxValueBuilder_ == null) {
-          kpiMaxValue_ = null;
+      public Builder clearStringVal() {
+        if (valueCase_ == 6) {
+          valueCase_ = 0;
+          value_ = null;
           onChanged();
-        } else {
-          kpiMaxValue_ = null;
-          kpiMaxValueBuilder_ = null;
         }
-
         return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       * <code>string stringVal = 6;</code>
+       * @param value The bytes for stringVal to set.
+       * @return This builder for chaining.
        */
-      public monitoring.Monitoring.KpiValue.Builder getKpiMaxValueBuilder() {
-        
+      public Builder setStringValBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        valueCase_ = 6;
+        value_ = value;
         onChanged();
-        return getKpiMaxValueFieldBuilder().getBuilder();
+        return this;
       }
+
       /**
-       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       * <code>bool boolVal = 7;</code>
+       * @return Whether the boolVal field is set.
        */
-      public monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder() {
-        if (kpiMaxValueBuilder_ != null) {
-          return kpiMaxValueBuilder_.getMessageOrBuilder();
-        } else {
-          return kpiMaxValue_ == null ?
-              monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_;
+      public boolean hasBoolVal() {
+        return valueCase_ == 7;
+      }
+      /**
+       * <code>bool boolVal = 7;</code>
+       * @return The boolVal.
+       */
+      public boolean getBoolVal() {
+        if (valueCase_ == 7) {
+          return (java.lang.Boolean) value_;
         }
+        return false;
       }
       /**
-       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       * <code>bool boolVal = 7;</code>
+       * @param value The boolVal to set.
+       * @return This builder for chaining.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> 
-          getKpiMaxValueFieldBuilder() {
-        if (kpiMaxValueBuilder_ == null) {
-          kpiMaxValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder>(
-                  getKpiMaxValue(),
-                  getParentForChildren(),
-                  isClean());
-          kpiMaxValue_ = null;
+      public Builder setBoolVal(boolean value) {
+        valueCase_ = 7;
+        value_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>bool boolVal = 7;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearBoolVal() {
+        if (valueCase_ == 7) {
+          valueCase_ = 0;
+          value_ = null;
+          onChanged();
         }
-        return kpiMaxValueBuilder_;
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -9991,122 +8437,95 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.KpiValueRange)
+      // @@protoc_insertion_point(builder_scope:monitoring.KpiValue)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.KpiValueRange)
-    private static final monitoring.Monitoring.KpiValueRange DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.KpiValue)
+    private static final monitoring.Monitoring.KpiValue DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiValueRange();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiValue();
     }
 
-    public static monitoring.Monitoring.KpiValueRange getDefaultInstance() {
+    public static monitoring.Monitoring.KpiValue getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<KpiValueRange>
-        PARSER = new com.google.protobuf.AbstractParser<KpiValueRange>() {
+    private static final com.google.protobuf.Parser<KpiValue>
+        PARSER = new com.google.protobuf.AbstractParser<KpiValue>() {
       @java.lang.Override
-      public KpiValueRange parsePartialFrom(
+      public KpiValue parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new KpiValueRange(input, extensionRegistry);
+        return new KpiValue(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<KpiValueRange> parser() {
+    public static com.google.protobuf.Parser<KpiValue> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<KpiValueRange> getParserForType() {
+    public com.google.protobuf.Parser<KpiValue> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.KpiValueRange getDefaultInstanceForType() {
+    public monitoring.Monitoring.KpiValue getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface KpiValueOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.KpiValue)
+  public interface KpiListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>uint32 intVal = 1;</code>
-     * @return Whether the intVal field is set.
-     */
-    boolean hasIntVal();
-    /**
-     * <code>uint32 intVal = 1;</code>
-     * @return The intVal.
-     */
-    int getIntVal();
-
-    /**
-     * <code>float floatVal = 2;</code>
-     * @return Whether the floatVal field is set.
-     */
-    boolean hasFloatVal();
-    /**
-     * <code>float floatVal = 2;</code>
-     * @return The floatVal.
-     */
-    float getFloatVal();
-
-    /**
-     * <code>string stringVal = 3;</code>
-     * @return Whether the stringVal field is set.
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
-    boolean hasStringVal();
+    java.util.List<monitoring.Monitoring.Kpi> 
+        getKpiListList();
     /**
-     * <code>string stringVal = 3;</code>
-     * @return The stringVal.
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
-    java.lang.String getStringVal();
+    monitoring.Monitoring.Kpi getKpiList(int index);
     /**
-     * <code>string stringVal = 3;</code>
-     * @return The bytes for stringVal.
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
-    com.google.protobuf.ByteString
-        getStringValBytes();
-
+    int getKpiListCount();
     /**
-     * <code>bool boolVal = 4;</code>
-     * @return Whether the boolVal field is set.
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
-    boolean hasBoolVal();
+    java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
+        getKpiListOrBuilderList();
     /**
-     * <code>bool boolVal = 4;</code>
-     * @return The boolVal.
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
-    boolean getBoolVal();
-
-    public monitoring.Monitoring.KpiValue.ValueCase getValueCase();
+    monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
+        int index);
   }
   /**
-   * Protobuf type {@code monitoring.KpiValue}
+   * Protobuf type {@code monitoring.KpiList}
    */
-  public static final class KpiValue extends
+  public static final class KpiList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.KpiValue)
-      KpiValueOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.KpiList)
+      KpiListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use KpiValue.newBuilder() to construct.
-    private KpiValue(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use KpiList.newBuilder() to construct.
+    private KpiList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private KpiValue() {
+    private KpiList() {
+      kpiList_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new KpiValue();
+      return new KpiList();
     }
 
     @java.lang.Override
@@ -10114,7 +8533,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private KpiValue(
+    private KpiList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -10122,6 +8541,7 @@ public final class Monitoring {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -10132,25 +8552,13 @@ public final class Monitoring {
             case 0:
               done = true;
               break;
-            case 8: {
-              valueCase_ = 1;
-              value_ = input.readUInt32();
-              break;
-            }
-            case 21: {
-              valueCase_ = 2;
-              value_ = input.readFloat();
-              break;
-            }
-            case 26: {
-              java.lang.String s = input.readStringRequireUtf8();
-              valueCase_ = 3;
-              value_ = s;
-              break;
-            }
-            case 32: {
-              valueCase_ = 4;
-              value_ = input.readBool();
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                kpiList_ = new java.util.ArrayList<monitoring.Monitoring.Kpi>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              kpiList_.add(
+                  input.readMessage(monitoring.Monitoring.Kpi.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -10168,181 +8576,64 @@ public final class Monitoring {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiValue_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.KpiValue.class, monitoring.Monitoring.KpiValue.Builder.class);
-    }
-
-    private int valueCase_ = 0;
-    private java.lang.Object value_;
-    public enum ValueCase
-        implements com.google.protobuf.Internal.EnumLite,
-            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
-      INTVAL(1),
-      FLOATVAL(2),
-      STRINGVAL(3),
-      BOOLVAL(4),
-      VALUE_NOT_SET(0);
-      private final int value;
-      private ValueCase(int value) {
-        this.value = value;
-      }
-      /**
-       * @param value The number of the enum to look for.
-       * @return The enum associated with the given number.
-       * @deprecated Use {@link #forNumber(int)} instead.
-       */
-      @java.lang.Deprecated
-      public static ValueCase valueOf(int value) {
-        return forNumber(value);
-      }
-
-      public static ValueCase forNumber(int value) {
-        switch (value) {
-          case 1: return INTVAL;
-          case 2: return FLOATVAL;
-          case 3: return STRINGVAL;
-          case 4: return BOOLVAL;
-          case 0: return VALUE_NOT_SET;
-          default: return null;
-        }
-      }
-      public int getNumber() {
-        return this.value;
-      }
-    };
-
-    public ValueCase
-    getValueCase() {
-      return ValueCase.forNumber(
-          valueCase_);
+      }
     }
-
-    public static final int INTVAL_FIELD_NUMBER = 1;
-    /**
-     * <code>uint32 intVal = 1;</code>
-     * @return Whether the intVal field is set.
-     */
-    @java.lang.Override
-    public boolean hasIntVal() {
-      return valueCase_ == 1;
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_KpiList_descriptor;
     }
-    /**
-     * <code>uint32 intVal = 1;</code>
-     * @return The intVal.
-     */
+
     @java.lang.Override
-    public int getIntVal() {
-      if (valueCase_ == 1) {
-        return (java.lang.Integer) value_;
-      }
-      return 0;
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_KpiList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.KpiList.class, monitoring.Monitoring.KpiList.Builder.class);
     }
 
-    public static final int FLOATVAL_FIELD_NUMBER = 2;
+    public static final int KPI_LIST_FIELD_NUMBER = 1;
+    private java.util.List<monitoring.Monitoring.Kpi> kpiList_;
     /**
-     * <code>float floatVal = 2;</code>
-     * @return Whether the floatVal field is set.
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
     @java.lang.Override
-    public boolean hasFloatVal() {
-      return valueCase_ == 2;
+    public java.util.List<monitoring.Monitoring.Kpi> getKpiListList() {
+      return kpiList_;
     }
     /**
-     * <code>float floatVal = 2;</code>
-     * @return The floatVal.
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
     @java.lang.Override
-    public float getFloatVal() {
-      if (valueCase_ == 2) {
-        return (java.lang.Float) value_;
-      }
-      return 0F;
-    }
-
-    public static final int STRINGVAL_FIELD_NUMBER = 3;
-    /**
-     * <code>string stringVal = 3;</code>
-     * @return Whether the stringVal field is set.
-     */
-    public boolean hasStringVal() {
-      return valueCase_ == 3;
-    }
-    /**
-     * <code>string stringVal = 3;</code>
-     * @return The stringVal.
-     */
-    public java.lang.String getStringVal() {
-      java.lang.Object ref = "";
-      if (valueCase_ == 3) {
-        ref = value_;
-      }
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        if (valueCase_ == 3) {
-          value_ = s;
-        }
-        return s;
-      }
+    public java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
+        getKpiListOrBuilderList() {
+      return kpiList_;
     }
     /**
-     * <code>string stringVal = 3;</code>
-     * @return The bytes for stringVal.
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
-    public com.google.protobuf.ByteString
-        getStringValBytes() {
-      java.lang.Object ref = "";
-      if (valueCase_ == 3) {
-        ref = value_;
-      }
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        if (valueCase_ == 3) {
-          value_ = b;
-        }
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    @java.lang.Override
+    public int getKpiListCount() {
+      return kpiList_.size();
     }
-
-    public static final int BOOLVAL_FIELD_NUMBER = 4;
     /**
-     * <code>bool boolVal = 4;</code>
-     * @return Whether the boolVal field is set.
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
     @java.lang.Override
-    public boolean hasBoolVal() {
-      return valueCase_ == 4;
+    public monitoring.Monitoring.Kpi getKpiList(int index) {
+      return kpiList_.get(index);
     }
     /**
-     * <code>bool boolVal = 4;</code>
-     * @return The boolVal.
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
      */
     @java.lang.Override
-    public boolean getBoolVal() {
-      if (valueCase_ == 4) {
-        return (java.lang.Boolean) value_;
-      }
-      return false;
+    public monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
+        int index) {
+      return kpiList_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -10359,20 +8650,8 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (valueCase_ == 1) {
-        output.writeUInt32(
-            1, (int)((java.lang.Integer) value_));
-      }
-      if (valueCase_ == 2) {
-        output.writeFloat(
-            2, (float)((java.lang.Float) value_));
-      }
-      if (valueCase_ == 3) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, value_);
-      }
-      if (valueCase_ == 4) {
-        output.writeBool(
-            4, (boolean)((java.lang.Boolean) value_));
+      for (int i = 0; i < kpiList_.size(); i++) {
+        output.writeMessage(1, kpiList_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -10383,23 +8662,9 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (valueCase_ == 1) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(
-              1, (int)((java.lang.Integer) value_));
-      }
-      if (valueCase_ == 2) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(
-              2, (float)((java.lang.Float) value_));
-      }
-      if (valueCase_ == 3) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, value_);
-      }
-      if (valueCase_ == 4) {
+      for (int i = 0; i < kpiList_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(
-              4, (boolean)((java.lang.Boolean) value_));
+          .computeMessageSize(1, kpiList_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -10411,33 +8676,13 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.KpiValue)) {
+      if (!(obj instanceof monitoring.Monitoring.KpiList)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.KpiValue other = (monitoring.Monitoring.KpiValue) obj;
+      monitoring.Monitoring.KpiList other = (monitoring.Monitoring.KpiList) obj;
 
-      if (!getValueCase().equals(other.getValueCase())) return false;
-      switch (valueCase_) {
-        case 1:
-          if (getIntVal()
-              != other.getIntVal()) return false;
-          break;
-        case 2:
-          if (java.lang.Float.floatToIntBits(getFloatVal())
-              != java.lang.Float.floatToIntBits(
-                  other.getFloatVal())) return false;
-          break;
-        case 3:
-          if (!getStringVal()
-              .equals(other.getStringVal())) return false;
-          break;
-        case 4:
-          if (getBoolVal()
-              != other.getBoolVal()) return false;
-          break;
-        case 0:
-        default:
-      }
+      if (!getKpiListList()
+          .equals(other.getKpiListList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -10449,96 +8694,78 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      switch (valueCase_) {
-        case 1:
-          hash = (37 * hash) + INTVAL_FIELD_NUMBER;
-          hash = (53 * hash) + getIntVal();
-          break;
-        case 2:
-          hash = (37 * hash) + FLOATVAL_FIELD_NUMBER;
-          hash = (53 * hash) + java.lang.Float.floatToIntBits(
-              getFloatVal());
-          break;
-        case 3:
-          hash = (37 * hash) + STRINGVAL_FIELD_NUMBER;
-          hash = (53 * hash) + getStringVal().hashCode();
-          break;
-        case 4:
-          hash = (37 * hash) + BOOLVAL_FIELD_NUMBER;
-          hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
-              getBoolVal());
-          break;
-        case 0:
-        default:
+      if (getKpiListCount() > 0) {
+        hash = (37 * hash) + KPI_LIST_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiListList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.KpiList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.KpiList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.KpiList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.KpiList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(byte[] data)
+    public static monitoring.Monitoring.KpiList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.KpiList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.KpiList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValue parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiValue parseDelimitedFrom(
+    public static monitoring.Monitoring.KpiList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.KpiList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.KpiList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -10551,7 +8778,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.KpiValue prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.KpiList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -10567,26 +8794,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.KpiValue}
+     * Protobuf type {@code monitoring.KpiList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.KpiValue)
-        monitoring.Monitoring.KpiValueOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.KpiList)
+        monitoring.Monitoring.KpiListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_KpiList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiValue_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_KpiList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.KpiValue.class, monitoring.Monitoring.KpiValue.Builder.class);
+                monitoring.Monitoring.KpiList.class, monitoring.Monitoring.KpiList.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.KpiValue.newBuilder()
+      // Construct using monitoring.Monitoring.KpiList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -10599,52 +8826,54 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getKpiListFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        valueCase_ = 0;
-        value_ = null;
+        if (kpiListBuilder_ == null) {
+          kpiList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          kpiListBuilder_.clear();
+        }
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor;
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.KpiValue getDefaultInstanceForType() {
-        return monitoring.Monitoring.KpiValue.getDefaultInstance();
+        return monitoring.Monitoring.internal_static_monitoring_KpiList_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiValue build() {
-        monitoring.Monitoring.KpiValue result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
+      public monitoring.Monitoring.KpiList getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiValue buildPartial() {
-        monitoring.Monitoring.KpiValue result = new monitoring.Monitoring.KpiValue(this);
-        if (valueCase_ == 1) {
-          result.value_ = value_;
-        }
-        if (valueCase_ == 2) {
-          result.value_ = value_;
-        }
-        if (valueCase_ == 3) {
-          result.value_ = value_;
+      public monitoring.Monitoring.KpiList build() {
+        monitoring.Monitoring.KpiList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
         }
-        if (valueCase_ == 4) {
-          result.value_ = value_;
+        return result;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiList buildPartial() {
+        monitoring.Monitoring.KpiList result = new monitoring.Monitoring.KpiList(this);
+        int from_bitField0_ = bitField0_;
+        if (kpiListBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.kpiList_ = kpiList_;
+        } else {
+          result.kpiList_ = kpiListBuilder_.build();
         }
-        result.valueCase_ = valueCase_;
         onBuilt();
         return result;
       }
@@ -10683,37 +8912,40 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.KpiValue) {
-          return mergeFrom((monitoring.Monitoring.KpiValue)other);
+        if (other instanceof monitoring.Monitoring.KpiList) {
+          return mergeFrom((monitoring.Monitoring.KpiList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.KpiValue other) {
-        if (other == monitoring.Monitoring.KpiValue.getDefaultInstance()) return this;
-        switch (other.getValueCase()) {
-          case INTVAL: {
-            setIntVal(other.getIntVal());
-            break;
-          }
-          case FLOATVAL: {
-            setFloatVal(other.getFloatVal());
-            break;
-          }
-          case STRINGVAL: {
-            valueCase_ = 3;
-            value_ = other.value_;
+      public Builder mergeFrom(monitoring.Monitoring.KpiList other) {
+        if (other == monitoring.Monitoring.KpiList.getDefaultInstance()) return this;
+        if (kpiListBuilder_ == null) {
+          if (!other.kpiList_.isEmpty()) {
+            if (kpiList_.isEmpty()) {
+              kpiList_ = other.kpiList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureKpiListIsMutable();
+              kpiList_.addAll(other.kpiList_);
+            }
             onChanged();
-            break;
           }
-          case BOOLVAL: {
-            setBoolVal(other.getBoolVal());
-            break;
-          }
-          case VALUE_NOT_SET: {
-            break;
+        } else {
+          if (!other.kpiList_.isEmpty()) {
+            if (kpiListBuilder_.isEmpty()) {
+              kpiListBuilder_.dispose();
+              kpiListBuilder_ = null;
+              kpiList_ = other.kpiList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              kpiListBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getKpiListFieldBuilder() : null;
+            } else {
+              kpiListBuilder_.addAllMessages(other.kpiList_);
+            }
           }
         }
         this.mergeUnknownFields(other.unknownFields);
@@ -10731,11 +8963,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.KpiValue parsedMessage = null;
+        monitoring.Monitoring.KpiList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.KpiValue) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.KpiList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -10744,240 +8976,246 @@ public final class Monitoring {
         }
         return this;
       }
-      private int valueCase_ = 0;
-      private java.lang.Object value_;
-      public ValueCase
-          getValueCase() {
-        return ValueCase.forNumber(
-            valueCase_);
-      }
+      private int bitField0_;
 
-      public Builder clearValue() {
-        valueCase_ = 0;
-        value_ = null;
-        onChanged();
-        return this;
+      private java.util.List<monitoring.Monitoring.Kpi> kpiList_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiListIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiList_ = new java.util.ArrayList<monitoring.Monitoring.Kpi>(kpiList_);
+          bitField0_ |= 0x00000001;
+         }
       }
 
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.Kpi, monitoring.Monitoring.Kpi.Builder, monitoring.Monitoring.KpiOrBuilder> kpiListBuilder_;
 
       /**
-       * <code>uint32 intVal = 1;</code>
-       * @return Whether the intVal field is set.
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public boolean hasIntVal() {
-        return valueCase_ == 1;
+      public java.util.List<monitoring.Monitoring.Kpi> getKpiListList() {
+        if (kpiListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(kpiList_);
+        } else {
+          return kpiListBuilder_.getMessageList();
+        }
       }
       /**
-       * <code>uint32 intVal = 1;</code>
-       * @return The intVal.
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public int getIntVal() {
-        if (valueCase_ == 1) {
-          return (java.lang.Integer) value_;
+      public int getKpiListCount() {
+        if (kpiListBuilder_ == null) {
+          return kpiList_.size();
+        } else {
+          return kpiListBuilder_.getCount();
         }
-        return 0;
       }
       /**
-       * <code>uint32 intVal = 1;</code>
-       * @param value The intVal to set.
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public Builder setIntVal(int value) {
-        valueCase_ = 1;
-        value_ = value;
-        onChanged();
-        return this;
+      public monitoring.Monitoring.Kpi getKpiList(int index) {
+        if (kpiListBuilder_ == null) {
+          return kpiList_.get(index);
+        } else {
+          return kpiListBuilder_.getMessage(index);
+        }
       }
       /**
-       * <code>uint32 intVal = 1;</code>
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public Builder clearIntVal() {
-        if (valueCase_ == 1) {
-          valueCase_ = 0;
-          value_ = null;
+      public Builder setKpiList(
+          int index, monitoring.Monitoring.Kpi value) {
+        if (kpiListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiListIsMutable();
+          kpiList_.set(index, value);
           onChanged();
+        } else {
+          kpiListBuilder_.setMessage(index, value);
         }
         return this;
       }
-
-      /**
-       * <code>float floatVal = 2;</code>
-       * @return Whether the floatVal field is set.
-       */
-      public boolean hasFloatVal() {
-        return valueCase_ == 2;
-      }
       /**
-       * <code>float floatVal = 2;</code>
-       * @return The floatVal.
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public float getFloatVal() {
-        if (valueCase_ == 2) {
-          return (java.lang.Float) value_;
+      public Builder setKpiList(
+          int index, monitoring.Monitoring.Kpi.Builder builderForValue) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiListBuilder_.setMessage(index, builderForValue.build());
         }
-        return 0F;
+        return this;
       }
       /**
-       * <code>float floatVal = 2;</code>
-       * @param value The floatVal to set.
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public Builder setFloatVal(float value) {
-        valueCase_ = 2;
-        value_ = value;
-        onChanged();
+      public Builder addKpiList(monitoring.Monitoring.Kpi value) {
+        if (kpiListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiListIsMutable();
+          kpiList_.add(value);
+          onChanged();
+        } else {
+          kpiListBuilder_.addMessage(value);
+        }
         return this;
       }
       /**
-       * <code>float floatVal = 2;</code>
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public Builder clearFloatVal() {
-        if (valueCase_ == 2) {
-          valueCase_ = 0;
-          value_ = null;
+      public Builder addKpiList(
+          int index, monitoring.Monitoring.Kpi value) {
+        if (kpiListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiListIsMutable();
+          kpiList_.add(index, value);
           onChanged();
+        } else {
+          kpiListBuilder_.addMessage(index, value);
         }
         return this;
       }
-
       /**
-       * <code>string stringVal = 3;</code>
-       * @return Whether the stringVal field is set.
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      @java.lang.Override
-      public boolean hasStringVal() {
-        return valueCase_ == 3;
+      public Builder addKpiList(
+          monitoring.Monitoring.Kpi.Builder builderForValue) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.add(builderForValue.build());
+          onChanged();
+        } else {
+          kpiListBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
       }
       /**
-       * <code>string stringVal = 3;</code>
-       * @return The stringVal.
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      @java.lang.Override
-      public java.lang.String getStringVal() {
-        java.lang.Object ref = "";
-        if (valueCase_ == 3) {
-          ref = value_;
-        }
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          if (valueCase_ == 3) {
-            value_ = s;
-          }
-          return s;
+      public Builder addKpiList(
+          int index, monitoring.Monitoring.Kpi.Builder builderForValue) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.add(index, builderForValue.build());
+          onChanged();
         } else {
-          return (java.lang.String) ref;
+          kpiListBuilder_.addMessage(index, builderForValue.build());
         }
+        return this;
       }
       /**
-       * <code>string stringVal = 3;</code>
-       * @return The bytes for stringVal.
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      @java.lang.Override
-      public com.google.protobuf.ByteString
-          getStringValBytes() {
-        java.lang.Object ref = "";
-        if (valueCase_ == 3) {
-          ref = value_;
-        }
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          if (valueCase_ == 3) {
-            value_ = b;
-          }
-          return b;
+      public Builder addAllKpiList(
+          java.lang.Iterable<? extends monitoring.Monitoring.Kpi> values) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, kpiList_);
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          kpiListBuilder_.addAllMessages(values);
         }
+        return this;
       }
       /**
-       * <code>string stringVal = 3;</code>
-       * @param value The stringVal to set.
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public Builder setStringVal(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  valueCase_ = 3;
-        value_ = value;
-        onChanged();
+      public Builder clearKpiList() {
+        if (kpiListBuilder_ == null) {
+          kpiList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          kpiListBuilder_.clear();
+        }
         return this;
       }
       /**
-       * <code>string stringVal = 3;</code>
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public Builder clearStringVal() {
-        if (valueCase_ == 3) {
-          valueCase_ = 0;
-          value_ = null;
+      public Builder removeKpiList(int index) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.remove(index);
           onChanged();
+        } else {
+          kpiListBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>string stringVal = 3;</code>
-       * @param value The bytes for stringVal to set.
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public Builder setStringValBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        valueCase_ = 3;
-        value_ = value;
-        onChanged();
-        return this;
+      public monitoring.Monitoring.Kpi.Builder getKpiListBuilder(
+          int index) {
+        return getKpiListFieldBuilder().getBuilder(index);
       }
-
       /**
-       * <code>bool boolVal = 4;</code>
-       * @return Whether the boolVal field is set.
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public boolean hasBoolVal() {
-        return valueCase_ == 4;
+      public monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
+          int index) {
+        if (kpiListBuilder_ == null) {
+          return kpiList_.get(index);  } else {
+          return kpiListBuilder_.getMessageOrBuilder(index);
+        }
       }
       /**
-       * <code>bool boolVal = 4;</code>
-       * @return The boolVal.
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public boolean getBoolVal() {
-        if (valueCase_ == 4) {
-          return (java.lang.Boolean) value_;
+      public java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
+           getKpiListOrBuilderList() {
+        if (kpiListBuilder_ != null) {
+          return kpiListBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(kpiList_);
         }
-        return false;
       }
       /**
-       * <code>bool boolVal = 4;</code>
-       * @param value The boolVal to set.
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public Builder setBoolVal(boolean value) {
-        valueCase_ = 4;
-        value_ = value;
-        onChanged();
-        return this;
+      public monitoring.Monitoring.Kpi.Builder addKpiListBuilder() {
+        return getKpiListFieldBuilder().addBuilder(
+            monitoring.Monitoring.Kpi.getDefaultInstance());
       }
       /**
-       * <code>bool boolVal = 4;</code>
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
        */
-      public Builder clearBoolVal() {
-        if (valueCase_ == 4) {
-          valueCase_ = 0;
-          value_ = null;
-          onChanged();
+      public monitoring.Monitoring.Kpi.Builder addKpiListBuilder(
+          int index) {
+        return getKpiListFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.Kpi.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public java.util.List<monitoring.Monitoring.Kpi.Builder> 
+           getKpiListBuilderList() {
+        return getKpiListFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.Kpi, monitoring.Monitoring.Kpi.Builder, monitoring.Monitoring.KpiOrBuilder> 
+          getKpiListFieldBuilder() {
+        if (kpiListBuilder_ == null) {
+          kpiListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.Kpi, monitoring.Monitoring.Kpi.Builder, monitoring.Monitoring.KpiOrBuilder>(
+                  kpiList_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          kpiList_ = null;
         }
-        return this;
+        return kpiListBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -10992,95 +9230,95 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.KpiValue)
+      // @@protoc_insertion_point(builder_scope:monitoring.KpiList)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.KpiValue)
-    private static final monitoring.Monitoring.KpiValue DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.KpiList)
+    private static final monitoring.Monitoring.KpiList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiValue();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiList();
     }
 
-    public static monitoring.Monitoring.KpiValue getDefaultInstance() {
+    public static monitoring.Monitoring.KpiList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<KpiValue>
-        PARSER = new com.google.protobuf.AbstractParser<KpiValue>() {
+    private static final com.google.protobuf.Parser<KpiList>
+        PARSER = new com.google.protobuf.AbstractParser<KpiList>() {
       @java.lang.Override
-      public KpiValue parsePartialFrom(
+      public KpiList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new KpiValue(input, extensionRegistry);
+        return new KpiList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<KpiValue> parser() {
+    public static com.google.protobuf.Parser<KpiList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<KpiValue> getParserForType() {
+    public com.google.protobuf.Parser<KpiList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.KpiValue getDefaultInstanceForType() {
+    public monitoring.Monitoring.KpiList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface KpiListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.KpiList)
+  public interface KpiDescriptorListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiDescriptorList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
      */
-    java.util.List<monitoring.Monitoring.Kpi> 
-        getKpiListList();
+    java.util.List<monitoring.Monitoring.KpiDescriptor> 
+        getKpiDescriptorListList();
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
      */
-    monitoring.Monitoring.Kpi getKpiList(int index);
+    monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index);
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
      */
-    int getKpiListCount();
+    int getKpiDescriptorListCount();
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
      */
-    java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
-        getKpiListOrBuilderList();
+    java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> 
+        getKpiDescriptorListOrBuilderList();
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
      */
-    monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
+    monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder(
         int index);
   }
   /**
-   * Protobuf type {@code monitoring.KpiList}
+   * Protobuf type {@code monitoring.KpiDescriptorList}
    */
-  public static final class KpiList extends
+  public static final class KpiDescriptorList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.KpiList)
-      KpiListOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.KpiDescriptorList)
+      KpiDescriptorListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use KpiList.newBuilder() to construct.
-    private KpiList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use KpiDescriptorList.newBuilder() to construct.
+    private KpiDescriptorList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private KpiList() {
-      kpiList_ = java.util.Collections.emptyList();
+    private KpiDescriptorList() {
+      kpiDescriptorList_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new KpiList();
+      return new KpiDescriptorList();
     }
 
     @java.lang.Override
@@ -11088,7 +9326,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private KpiList(
+    private KpiDescriptorList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -11109,11 +9347,11 @@ public final class Monitoring {
               break;
             case 10: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                kpiList_ = new java.util.ArrayList<monitoring.Monitoring.Kpi>();
+                kpiDescriptorList_ = new java.util.ArrayList<monitoring.Monitoring.KpiDescriptor>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              kpiList_.add(
-                  input.readMessage(monitoring.Monitoring.Kpi.parser(), extensionRegistry));
+              kpiDescriptorList_.add(
+                  input.readMessage(monitoring.Monitoring.KpiDescriptor.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -11132,7 +9370,7 @@ public final class Monitoring {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
+          kpiDescriptorList_ = java.util.Collections.unmodifiableList(kpiDescriptorList_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -11140,55 +9378,55 @@ public final class Monitoring {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiList_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiList_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.KpiList.class, monitoring.Monitoring.KpiList.Builder.class);
+              monitoring.Monitoring.KpiDescriptorList.class, monitoring.Monitoring.KpiDescriptorList.Builder.class);
     }
 
-    public static final int KPI_LIST_FIELD_NUMBER = 1;
-    private java.util.List<monitoring.Monitoring.Kpi> kpiList_;
+    public static final int KPI_DESCRIPTOR_LIST_FIELD_NUMBER = 1;
+    private java.util.List<monitoring.Monitoring.KpiDescriptor> kpiDescriptorList_;
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<monitoring.Monitoring.Kpi> getKpiListList() {
-      return kpiList_;
+    public java.util.List<monitoring.Monitoring.KpiDescriptor> getKpiDescriptorListList() {
+      return kpiDescriptorList_;
     }
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
-        getKpiListOrBuilderList() {
-      return kpiList_;
+    public java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> 
+        getKpiDescriptorListOrBuilderList() {
+      return kpiDescriptorList_;
     }
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
      */
     @java.lang.Override
-    public int getKpiListCount() {
-      return kpiList_.size();
+    public int getKpiDescriptorListCount() {
+      return kpiDescriptorList_.size();
     }
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.Kpi getKpiList(int index) {
-      return kpiList_.get(index);
+    public monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index) {
+      return kpiDescriptorList_.get(index);
     }
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
+    public monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder(
         int index) {
-      return kpiList_.get(index);
+      return kpiDescriptorList_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -11205,8 +9443,8 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < kpiList_.size(); i++) {
-        output.writeMessage(1, kpiList_.get(i));
+      for (int i = 0; i < kpiDescriptorList_.size(); i++) {
+        output.writeMessage(1, kpiDescriptorList_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -11217,9 +9455,9 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < kpiList_.size(); i++) {
+      for (int i = 0; i < kpiDescriptorList_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, kpiList_.get(i));
+          .computeMessageSize(1, kpiDescriptorList_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -11231,13 +9469,13 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.KpiList)) {
+      if (!(obj instanceof monitoring.Monitoring.KpiDescriptorList)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.KpiList other = (monitoring.Monitoring.KpiList) obj;
+      monitoring.Monitoring.KpiDescriptorList other = (monitoring.Monitoring.KpiDescriptorList) obj;
 
-      if (!getKpiListList()
-          .equals(other.getKpiListList())) return false;
+      if (!getKpiDescriptorListList()
+          .equals(other.getKpiDescriptorListList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -11249,78 +9487,78 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getKpiListCount() > 0) {
-        hash = (37 * hash) + KPI_LIST_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiListList().hashCode();
+      if (getKpiDescriptorListCount() > 0) {
+        hash = (37 * hash) + KPI_DESCRIPTOR_LIST_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiDescriptorListList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(byte[] data)
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiList parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.KpiDescriptorList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiList parseDelimitedFrom(
+    public static monitoring.Monitoring.KpiDescriptorList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -11333,7 +9571,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.KpiList prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.KpiDescriptorList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -11349,26 +9587,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.KpiList}
+     * Protobuf type {@code monitoring.KpiDescriptorList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.KpiList)
-        monitoring.Monitoring.KpiListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.KpiDescriptorList)
+        monitoring.Monitoring.KpiDescriptorListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiList_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiList_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.KpiList.class, monitoring.Monitoring.KpiList.Builder.class);
+                monitoring.Monitoring.KpiDescriptorList.class, monitoring.Monitoring.KpiDescriptorList.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.KpiList.newBuilder()
+      // Construct using monitoring.Monitoring.KpiDescriptorList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -11381,17 +9619,17 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getKpiListFieldBuilder();
+          getKpiDescriptorListFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (kpiListBuilder_ == null) {
-          kpiList_ = java.util.Collections.emptyList();
+        if (kpiDescriptorListBuilder_ == null) {
+          kpiDescriptorList_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          kpiListBuilder_.clear();
+          kpiDescriptorListBuilder_.clear();
         }
         return this;
       }
@@ -11399,17 +9637,17 @@ public final class Monitoring {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiList_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiList getDefaultInstanceForType() {
-        return monitoring.Monitoring.KpiList.getDefaultInstance();
+      public monitoring.Monitoring.KpiDescriptorList getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiDescriptorList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiList build() {
-        monitoring.Monitoring.KpiList result = buildPartial();
+      public monitoring.Monitoring.KpiDescriptorList build() {
+        monitoring.Monitoring.KpiDescriptorList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -11417,17 +9655,17 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiList buildPartial() {
-        monitoring.Monitoring.KpiList result = new monitoring.Monitoring.KpiList(this);
+      public monitoring.Monitoring.KpiDescriptorList buildPartial() {
+        monitoring.Monitoring.KpiDescriptorList result = new monitoring.Monitoring.KpiDescriptorList(this);
         int from_bitField0_ = bitField0_;
-        if (kpiListBuilder_ == null) {
+        if (kpiDescriptorListBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
+            kpiDescriptorList_ = java.util.Collections.unmodifiableList(kpiDescriptorList_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.kpiList_ = kpiList_;
+          result.kpiDescriptorList_ = kpiDescriptorList_;
         } else {
-          result.kpiList_ = kpiListBuilder_.build();
+          result.kpiDescriptorList_ = kpiDescriptorListBuilder_.build();
         }
         onBuilt();
         return result;
@@ -11467,39 +9705,39 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.KpiList) {
-          return mergeFrom((monitoring.Monitoring.KpiList)other);
+        if (other instanceof monitoring.Monitoring.KpiDescriptorList) {
+          return mergeFrom((monitoring.Monitoring.KpiDescriptorList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.KpiList other) {
-        if (other == monitoring.Monitoring.KpiList.getDefaultInstance()) return this;
-        if (kpiListBuilder_ == null) {
-          if (!other.kpiList_.isEmpty()) {
-            if (kpiList_.isEmpty()) {
-              kpiList_ = other.kpiList_;
+      public Builder mergeFrom(monitoring.Monitoring.KpiDescriptorList other) {
+        if (other == monitoring.Monitoring.KpiDescriptorList.getDefaultInstance()) return this;
+        if (kpiDescriptorListBuilder_ == null) {
+          if (!other.kpiDescriptorList_.isEmpty()) {
+            if (kpiDescriptorList_.isEmpty()) {
+              kpiDescriptorList_ = other.kpiDescriptorList_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureKpiListIsMutable();
-              kpiList_.addAll(other.kpiList_);
+              ensureKpiDescriptorListIsMutable();
+              kpiDescriptorList_.addAll(other.kpiDescriptorList_);
             }
             onChanged();
           }
         } else {
-          if (!other.kpiList_.isEmpty()) {
-            if (kpiListBuilder_.isEmpty()) {
-              kpiListBuilder_.dispose();
-              kpiListBuilder_ = null;
-              kpiList_ = other.kpiList_;
+          if (!other.kpiDescriptorList_.isEmpty()) {
+            if (kpiDescriptorListBuilder_.isEmpty()) {
+              kpiDescriptorListBuilder_.dispose();
+              kpiDescriptorListBuilder_ = null;
+              kpiDescriptorList_ = other.kpiDescriptorList_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              kpiListBuilder_ = 
+              kpiDescriptorListBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getKpiListFieldBuilder() : null;
+                   getKpiDescriptorListFieldBuilder() : null;
             } else {
-              kpiListBuilder_.addAllMessages(other.kpiList_);
+              kpiDescriptorListBuilder_.addAllMessages(other.kpiDescriptorList_);
             }
           }
         }
@@ -11518,11 +9756,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.KpiList parsedMessage = null;
+        monitoring.Monitoring.KpiDescriptorList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.KpiList) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.KpiDescriptorList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -11533,244 +9771,244 @@ public final class Monitoring {
       }
       private int bitField0_;
 
-      private java.util.List<monitoring.Monitoring.Kpi> kpiList_ =
+      private java.util.List<monitoring.Monitoring.KpiDescriptor> kpiDescriptorList_ =
         java.util.Collections.emptyList();
-      private void ensureKpiListIsMutable() {
+      private void ensureKpiDescriptorListIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          kpiList_ = new java.util.ArrayList<monitoring.Monitoring.Kpi>(kpiList_);
+          kpiDescriptorList_ = new java.util.ArrayList<monitoring.Monitoring.KpiDescriptor>(kpiDescriptorList_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.Kpi, monitoring.Monitoring.Kpi.Builder, monitoring.Monitoring.KpiOrBuilder> kpiListBuilder_;
+          monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiDescriptor.Builder, monitoring.Monitoring.KpiDescriptorOrBuilder> kpiDescriptorListBuilder_;
 
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public java.util.List<monitoring.Monitoring.Kpi> getKpiListList() {
-        if (kpiListBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(kpiList_);
+      public java.util.List<monitoring.Monitoring.KpiDescriptor> getKpiDescriptorListList() {
+        if (kpiDescriptorListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(kpiDescriptorList_);
         } else {
-          return kpiListBuilder_.getMessageList();
+          return kpiDescriptorListBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public int getKpiListCount() {
-        if (kpiListBuilder_ == null) {
-          return kpiList_.size();
+      public int getKpiDescriptorListCount() {
+        if (kpiDescriptorListBuilder_ == null) {
+          return kpiDescriptorList_.size();
         } else {
-          return kpiListBuilder_.getCount();
+          return kpiDescriptorListBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public monitoring.Monitoring.Kpi getKpiList(int index) {
-        if (kpiListBuilder_ == null) {
-          return kpiList_.get(index);
+      public monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index) {
+        if (kpiDescriptorListBuilder_ == null) {
+          return kpiDescriptorList_.get(index);
         } else {
-          return kpiListBuilder_.getMessage(index);
+          return kpiDescriptorListBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public Builder setKpiList(
-          int index, monitoring.Monitoring.Kpi value) {
-        if (kpiListBuilder_ == null) {
+      public Builder setKpiDescriptorList(
+          int index, monitoring.Monitoring.KpiDescriptor value) {
+        if (kpiDescriptorListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureKpiListIsMutable();
-          kpiList_.set(index, value);
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.set(index, value);
           onChanged();
         } else {
-          kpiListBuilder_.setMessage(index, value);
+          kpiDescriptorListBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public Builder setKpiList(
-          int index, monitoring.Monitoring.Kpi.Builder builderForValue) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.set(index, builderForValue.build());
+      public Builder setKpiDescriptorList(
+          int index, monitoring.Monitoring.KpiDescriptor.Builder builderForValue) {
+        if (kpiDescriptorListBuilder_ == null) {
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.set(index, builderForValue.build());
           onChanged();
         } else {
-          kpiListBuilder_.setMessage(index, builderForValue.build());
+          kpiDescriptorListBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public Builder addKpiList(monitoring.Monitoring.Kpi value) {
-        if (kpiListBuilder_ == null) {
+      public Builder addKpiDescriptorList(monitoring.Monitoring.KpiDescriptor value) {
+        if (kpiDescriptorListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureKpiListIsMutable();
-          kpiList_.add(value);
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.add(value);
           onChanged();
         } else {
-          kpiListBuilder_.addMessage(value);
+          kpiDescriptorListBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public Builder addKpiList(
-          int index, monitoring.Monitoring.Kpi value) {
-        if (kpiListBuilder_ == null) {
+      public Builder addKpiDescriptorList(
+          int index, monitoring.Monitoring.KpiDescriptor value) {
+        if (kpiDescriptorListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureKpiListIsMutable();
-          kpiList_.add(index, value);
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.add(index, value);
           onChanged();
         } else {
-          kpiListBuilder_.addMessage(index, value);
+          kpiDescriptorListBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public Builder addKpiList(
-          monitoring.Monitoring.Kpi.Builder builderForValue) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.add(builderForValue.build());
+      public Builder addKpiDescriptorList(
+          monitoring.Monitoring.KpiDescriptor.Builder builderForValue) {
+        if (kpiDescriptorListBuilder_ == null) {
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.add(builderForValue.build());
           onChanged();
         } else {
-          kpiListBuilder_.addMessage(builderForValue.build());
+          kpiDescriptorListBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public Builder addKpiList(
-          int index, monitoring.Monitoring.Kpi.Builder builderForValue) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.add(index, builderForValue.build());
+      public Builder addKpiDescriptorList(
+          int index, monitoring.Monitoring.KpiDescriptor.Builder builderForValue) {
+        if (kpiDescriptorListBuilder_ == null) {
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.add(index, builderForValue.build());
           onChanged();
         } else {
-          kpiListBuilder_.addMessage(index, builderForValue.build());
+          kpiDescriptorListBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public Builder addAllKpiList(
-          java.lang.Iterable<? extends monitoring.Monitoring.Kpi> values) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
+      public Builder addAllKpiDescriptorList(
+          java.lang.Iterable<? extends monitoring.Monitoring.KpiDescriptor> values) {
+        if (kpiDescriptorListBuilder_ == null) {
+          ensureKpiDescriptorListIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, kpiList_);
+              values, kpiDescriptorList_);
           onChanged();
         } else {
-          kpiListBuilder_.addAllMessages(values);
+          kpiDescriptorListBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public Builder clearKpiList() {
-        if (kpiListBuilder_ == null) {
-          kpiList_ = java.util.Collections.emptyList();
+      public Builder clearKpiDescriptorList() {
+        if (kpiDescriptorListBuilder_ == null) {
+          kpiDescriptorList_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          kpiListBuilder_.clear();
+          kpiDescriptorListBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public Builder removeKpiList(int index) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.remove(index);
+      public Builder removeKpiDescriptorList(int index) {
+        if (kpiDescriptorListBuilder_ == null) {
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.remove(index);
           onChanged();
         } else {
-          kpiListBuilder_.remove(index);
+          kpiDescriptorListBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public monitoring.Monitoring.Kpi.Builder getKpiListBuilder(
+      public monitoring.Monitoring.KpiDescriptor.Builder getKpiDescriptorListBuilder(
           int index) {
-        return getKpiListFieldBuilder().getBuilder(index);
+        return getKpiDescriptorListFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
+      public monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder(
           int index) {
-        if (kpiListBuilder_ == null) {
-          return kpiList_.get(index);  } else {
-          return kpiListBuilder_.getMessageOrBuilder(index);
+        if (kpiDescriptorListBuilder_ == null) {
+          return kpiDescriptorList_.get(index);  } else {
+          return kpiDescriptorListBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
-           getKpiListOrBuilderList() {
-        if (kpiListBuilder_ != null) {
-          return kpiListBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> 
+           getKpiDescriptorListOrBuilderList() {
+        if (kpiDescriptorListBuilder_ != null) {
+          return kpiDescriptorListBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(kpiList_);
+          return java.util.Collections.unmodifiableList(kpiDescriptorList_);
         }
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public monitoring.Monitoring.Kpi.Builder addKpiListBuilder() {
-        return getKpiListFieldBuilder().addBuilder(
-            monitoring.Monitoring.Kpi.getDefaultInstance());
+      public monitoring.Monitoring.KpiDescriptor.Builder addKpiDescriptorListBuilder() {
+        return getKpiDescriptorListFieldBuilder().addBuilder(
+            monitoring.Monitoring.KpiDescriptor.getDefaultInstance());
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public monitoring.Monitoring.Kpi.Builder addKpiListBuilder(
+      public monitoring.Monitoring.KpiDescriptor.Builder addKpiDescriptorListBuilder(
           int index) {
-        return getKpiListFieldBuilder().addBuilder(
-            index, monitoring.Monitoring.Kpi.getDefaultInstance());
+        return getKpiDescriptorListFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.KpiDescriptor.getDefaultInstance());
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
        */
-      public java.util.List<monitoring.Monitoring.Kpi.Builder> 
-           getKpiListBuilderList() {
-        return getKpiListFieldBuilder().getBuilderList();
+      public java.util.List<monitoring.Monitoring.KpiDescriptor.Builder> 
+           getKpiDescriptorListBuilderList() {
+        return getKpiDescriptorListFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.Kpi, monitoring.Monitoring.Kpi.Builder, monitoring.Monitoring.KpiOrBuilder> 
-          getKpiListFieldBuilder() {
-        if (kpiListBuilder_ == null) {
-          kpiListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              monitoring.Monitoring.Kpi, monitoring.Monitoring.Kpi.Builder, monitoring.Monitoring.KpiOrBuilder>(
-                  kpiList_,
+          monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiDescriptor.Builder, monitoring.Monitoring.KpiDescriptorOrBuilder> 
+          getKpiDescriptorListFieldBuilder() {
+        if (kpiDescriptorListBuilder_ == null) {
+          kpiDescriptorListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiDescriptor.Builder, monitoring.Monitoring.KpiDescriptorOrBuilder>(
+                  kpiDescriptorList_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          kpiList_ = null;
+          kpiDescriptorList_ = null;
         }
-        return kpiListBuilder_;
+        return kpiDescriptorListBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -11785,128 +10023,251 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.KpiList)
+      // @@protoc_insertion_point(builder_scope:monitoring.KpiDescriptorList)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.KpiList)
-    private static final monitoring.Monitoring.KpiList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.KpiDescriptorList)
+    private static final monitoring.Monitoring.KpiDescriptorList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiList();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiDescriptorList();
     }
 
-    public static monitoring.Monitoring.KpiList getDefaultInstance() {
+    public static monitoring.Monitoring.KpiDescriptorList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<KpiList>
-        PARSER = new com.google.protobuf.AbstractParser<KpiList>() {
+    private static final com.google.protobuf.Parser<KpiDescriptorList>
+        PARSER = new com.google.protobuf.AbstractParser<KpiDescriptorList>() {
       @java.lang.Override
-      public KpiList parsePartialFrom(
+      public KpiDescriptorList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new KpiList(input, extensionRegistry);
+        return new KpiDescriptorList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<KpiList> parser() {
+    public static com.google.protobuf.Parser<KpiDescriptorList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<KpiList> getParserForType() {
+    public com.google.protobuf.Parser<KpiDescriptorList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.KpiList getDefaultInstanceForType() {
+    public monitoring.Monitoring.KpiDescriptorList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface KpiDescriptorListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.KpiDescriptorList)
+  public interface SubsDescriptorOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.SubsDescriptor)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+     * @return Whether the subsId field is set.
      */
-    java.util.List<monitoring.Monitoring.KpiDescriptor> 
-        getKpiDescriptorListList();
+    boolean hasSubsId();
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+     * @return The subsId.
      */
-    monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index);
+    monitoring.Monitoring.SubscriptionID getSubsId();
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
      */
-    int getKpiDescriptorListCount();
+    monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder();
+
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 2;</code>
+     * @return Whether the kpiId field is set.
      */
-    java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> 
-        getKpiDescriptorListOrBuilderList();
+    boolean hasKpiId();
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 2;</code>
+     * @return The kpiId.
      */
-    monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder(
-        int index);
+    monitoring.Monitoring.KpiId getKpiId();
+    /**
+     * <code>.monitoring.KpiId kpi_id = 2;</code>
+     */
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
+
+    /**
+     * <code>float sampling_duration_s = 3;</code>
+     * @return The samplingDurationS.
+     */
+    float getSamplingDurationS();
+
+    /**
+     * <code>float sampling_interval_s = 4;</code>
+     * @return The samplingIntervalS.
+     */
+    float getSamplingIntervalS();
+
+    /**
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>.context.Timestamp start_timestamp = 5;</code>
+     * @return Whether the startTimestamp field is set.
+     */
+    boolean hasStartTimestamp();
+    /**
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>.context.Timestamp start_timestamp = 5;</code>
+     * @return The startTimestamp.
+     */
+    context.ContextOuterClass.Timestamp getStartTimestamp();
+    /**
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>.context.Timestamp start_timestamp = 5;</code>
+     */
+    context.ContextOuterClass.TimestampOrBuilder getStartTimestampOrBuilder();
+
+    /**
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>.context.Timestamp end_timestamp = 6;</code>
+     * @return Whether the endTimestamp field is set.
+     */
+    boolean hasEndTimestamp();
+    /**
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>.context.Timestamp end_timestamp = 6;</code>
+     * @return The endTimestamp.
+     */
+    context.ContextOuterClass.Timestamp getEndTimestamp();
+    /**
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>.context.Timestamp end_timestamp = 6;</code>
+     */
+    context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder();
   }
   /**
-   * Protobuf type {@code monitoring.KpiDescriptorList}
+   * Protobuf type {@code monitoring.SubsDescriptor}
    */
-  public static final class KpiDescriptorList extends
+  public static final class SubsDescriptor extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.KpiDescriptorList)
-      KpiDescriptorListOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.SubsDescriptor)
+      SubsDescriptorOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use KpiDescriptorList.newBuilder() to construct.
-    private KpiDescriptorList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SubsDescriptor.newBuilder() to construct.
+    private SubsDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private KpiDescriptorList() {
-      kpiDescriptorList_ = java.util.Collections.emptyList();
+    private SubsDescriptor() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new KpiDescriptorList();
+      return new SubsDescriptor();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
     }
+    private SubsDescriptor(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              monitoring.Monitoring.SubscriptionID.Builder subBuilder = null;
+              if (subsId_ != null) {
+                subBuilder = subsId_.toBuilder();
+              }
+              subsId_ = input.readMessage(monitoring.Monitoring.SubscriptionID.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(subsId_);
+                subsId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              monitoring.Monitoring.KpiId.Builder subBuilder = null;
+              if (kpiId_ != null) {
+                subBuilder = kpiId_.toBuilder();
+              }
+              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiId_);
+                kpiId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 29: {
+
+              samplingDurationS_ = input.readFloat();
+              break;
+            }
+            case 37: {
 
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private KpiDescriptorList(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      int mutable_bitField0_ = 0;
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
+              samplingIntervalS_ = input.readFloat();
               break;
-            case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                kpiDescriptorList_ = new java.util.ArrayList<monitoring.Monitoring.KpiDescriptor>();
-                mutable_bitField0_ |= 0x00000001;
+            }
+            case 42: {
+              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
+              if (startTimestamp_ != null) {
+                subBuilder = startTimestamp_.toBuilder();
               }
-              kpiDescriptorList_.add(
-                  input.readMessage(monitoring.Monitoring.KpiDescriptor.parser(), extensionRegistry));
+              startTimestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(startTimestamp_);
+                startTimestamp_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 50: {
+              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
+              if (endTimestamp_ != null) {
+                subBuilder = endTimestamp_.toBuilder();
+              }
+              endTimestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endTimestamp_);
+                endTimestamp_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -11924,64 +10285,171 @@ public final class Monitoring {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          kpiDescriptorList_ = java.util.Collections.unmodifiableList(kpiDescriptorList_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.KpiDescriptorList.class, monitoring.Monitoring.KpiDescriptorList.Builder.class);
+              monitoring.Monitoring.SubsDescriptor.class, monitoring.Monitoring.SubsDescriptor.Builder.class);
     }
 
-    public static final int KPI_DESCRIPTOR_LIST_FIELD_NUMBER = 1;
-    private java.util.List<monitoring.Monitoring.KpiDescriptor> kpiDescriptorList_;
+    public static final int SUBS_ID_FIELD_NUMBER = 1;
+    private monitoring.Monitoring.SubscriptionID subsId_;
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+     * @return Whether the subsId field is set.
      */
     @java.lang.Override
-    public java.util.List<monitoring.Monitoring.KpiDescriptor> getKpiDescriptorListList() {
-      return kpiDescriptorList_;
+    public boolean hasSubsId() {
+      return subsId_ != null;
     }
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+     * @return The subsId.
      */
     @java.lang.Override
-    public java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> 
-        getKpiDescriptorListOrBuilderList() {
-      return kpiDescriptorList_;
+    public monitoring.Monitoring.SubscriptionID getSubsId() {
+      return subsId_ == null ? monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
     }
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
      */
     @java.lang.Override
-    public int getKpiDescriptorListCount() {
-      return kpiDescriptorList_.size();
+    public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder() {
+      return getSubsId();
     }
+
+    public static final int KPI_ID_FIELD_NUMBER = 2;
+    private monitoring.Monitoring.KpiId kpiId_;
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 2;</code>
+     * @return Whether the kpiId field is set.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index) {
-      return kpiDescriptorList_.get(index);
+    public boolean hasKpiId() {
+      return kpiId_ != null;
     }
     /**
-     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 2;</code>
+     * @return The kpiId.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder(
-        int index) {
-      return kpiDescriptorList_.get(index);
+    public monitoring.Monitoring.KpiId getKpiId() {
+      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+    }
+    /**
+     * <code>.monitoring.KpiId kpi_id = 2;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+      return getKpiId();
+    }
+
+    public static final int SAMPLING_DURATION_S_FIELD_NUMBER = 3;
+    private float samplingDurationS_;
+    /**
+     * <code>float sampling_duration_s = 3;</code>
+     * @return The samplingDurationS.
+     */
+    @java.lang.Override
+    public float getSamplingDurationS() {
+      return samplingDurationS_;
+    }
+
+    public static final int SAMPLING_INTERVAL_S_FIELD_NUMBER = 4;
+    private float samplingIntervalS_;
+    /**
+     * <code>float sampling_interval_s = 4;</code>
+     * @return The samplingIntervalS.
+     */
+    @java.lang.Override
+    public float getSamplingIntervalS() {
+      return samplingIntervalS_;
+    }
+
+    public static final int START_TIMESTAMP_FIELD_NUMBER = 5;
+    private context.ContextOuterClass.Timestamp startTimestamp_;
+    /**
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>.context.Timestamp start_timestamp = 5;</code>
+     * @return Whether the startTimestamp field is set.
+     */
+    @java.lang.Override
+    public boolean hasStartTimestamp() {
+      return startTimestamp_ != null;
+    }
+    /**
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>.context.Timestamp start_timestamp = 5;</code>
+     * @return The startTimestamp.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Timestamp getStartTimestamp() {
+      return startTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : startTimestamp_;
+    }
+    /**
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>.context.Timestamp start_timestamp = 5;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TimestampOrBuilder getStartTimestampOrBuilder() {
+      return getStartTimestamp();
+    }
+
+    public static final int END_TIMESTAMP_FIELD_NUMBER = 6;
+    private context.ContextOuterClass.Timestamp endTimestamp_;
+    /**
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>.context.Timestamp end_timestamp = 6;</code>
+     * @return Whether the endTimestamp field is set.
+     */
+    @java.lang.Override
+    public boolean hasEndTimestamp() {
+      return endTimestamp_ != null;
+    }
+    /**
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>.context.Timestamp end_timestamp = 6;</code>
+     * @return The endTimestamp.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Timestamp getEndTimestamp() {
+      return endTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_;
+    }
+    /**
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>.context.Timestamp end_timestamp = 6;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder() {
+      return getEndTimestamp();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -11998,8 +10466,23 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < kpiDescriptorList_.size(); i++) {
-        output.writeMessage(1, kpiDescriptorList_.get(i));
+      if (subsId_ != null) {
+        output.writeMessage(1, getSubsId());
+      }
+      if (kpiId_ != null) {
+        output.writeMessage(2, getKpiId());
+      }
+      if (samplingDurationS_ != 0F) {
+        output.writeFloat(3, samplingDurationS_);
+      }
+      if (samplingIntervalS_ != 0F) {
+        output.writeFloat(4, samplingIntervalS_);
+      }
+      if (startTimestamp_ != null) {
+        output.writeMessage(5, getStartTimestamp());
+      }
+      if (endTimestamp_ != null) {
+        output.writeMessage(6, getEndTimestamp());
       }
       unknownFields.writeTo(output);
     }
@@ -12010,9 +10493,29 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < kpiDescriptorList_.size(); i++) {
+      if (subsId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, kpiDescriptorList_.get(i));
+          .computeMessageSize(1, getSubsId());
+      }
+      if (kpiId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getKpiId());
+      }
+      if (samplingDurationS_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(3, samplingDurationS_);
+      }
+      if (samplingIntervalS_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(4, samplingIntervalS_);
+      }
+      if (startTimestamp_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, getStartTimestamp());
+      }
+      if (endTimestamp_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, getEndTimestamp());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -12024,13 +10527,37 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.KpiDescriptorList)) {
+      if (!(obj instanceof monitoring.Monitoring.SubsDescriptor)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.KpiDescriptorList other = (monitoring.Monitoring.KpiDescriptorList) obj;
+      monitoring.Monitoring.SubsDescriptor other = (monitoring.Monitoring.SubsDescriptor) obj;
 
-      if (!getKpiDescriptorListList()
-          .equals(other.getKpiDescriptorListList())) return false;
+      if (hasSubsId() != other.hasSubsId()) return false;
+      if (hasSubsId()) {
+        if (!getSubsId()
+            .equals(other.getSubsId())) return false;
+      }
+      if (hasKpiId() != other.hasKpiId()) return false;
+      if (hasKpiId()) {
+        if (!getKpiId()
+            .equals(other.getKpiId())) return false;
+      }
+      if (java.lang.Float.floatToIntBits(getSamplingDurationS())
+          != java.lang.Float.floatToIntBits(
+              other.getSamplingDurationS())) return false;
+      if (java.lang.Float.floatToIntBits(getSamplingIntervalS())
+          != java.lang.Float.floatToIntBits(
+              other.getSamplingIntervalS())) return false;
+      if (hasStartTimestamp() != other.hasStartTimestamp()) return false;
+      if (hasStartTimestamp()) {
+        if (!getStartTimestamp()
+            .equals(other.getStartTimestamp())) return false;
+      }
+      if (hasEndTimestamp() != other.hasEndTimestamp()) return false;
+      if (hasEndTimestamp()) {
+        if (!getEndTimestamp()
+            .equals(other.getEndTimestamp())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -12042,78 +10569,96 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getKpiDescriptorListCount() > 0) {
-        hash = (37 * hash) + KPI_DESCRIPTOR_LIST_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiDescriptorListList().hashCode();
+      if (hasSubsId()) {
+        hash = (37 * hash) + SUBS_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getSubsId().hashCode();
+      }
+      if (hasKpiId()) {
+        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiId().hashCode();
+      }
+      hash = (37 * hash) + SAMPLING_DURATION_S_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getSamplingDurationS());
+      hash = (37 * hash) + SAMPLING_INTERVAL_S_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getSamplingIntervalS());
+      if (hasStartTimestamp()) {
+        hash = (37 * hash) + START_TIMESTAMP_FIELD_NUMBER;
+        hash = (53 * hash) + getStartTimestamp().hashCode();
+      }
+      if (hasEndTimestamp()) {
+        hash = (37 * hash) + END_TIMESTAMP_FIELD_NUMBER;
+        hash = (53 * hash) + getEndTimestamp().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(byte[] data)
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.SubsDescriptor parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseDelimitedFrom(
+    public static monitoring.Monitoring.SubsDescriptor parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -12126,7 +10671,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.KpiDescriptorList prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.SubsDescriptor prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -12142,26 +10687,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.KpiDescriptorList}
+     * Protobuf type {@code monitoring.SubsDescriptor}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.KpiDescriptorList)
-        monitoring.Monitoring.KpiDescriptorListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.SubsDescriptor)
+        monitoring.Monitoring.SubsDescriptorOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.KpiDescriptorList.class, monitoring.Monitoring.KpiDescriptorList.Builder.class);
+                monitoring.Monitoring.SubsDescriptor.class, monitoring.Monitoring.SubsDescriptor.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.KpiDescriptorList.newBuilder()
+      // Construct using monitoring.Monitoring.SubsDescriptor.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -12174,17 +10719,38 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getKpiDescriptorListFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (kpiDescriptorListBuilder_ == null) {
-          kpiDescriptorList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (subsIdBuilder_ == null) {
+          subsId_ = null;
         } else {
-          kpiDescriptorListBuilder_.clear();
+          subsId_ = null;
+          subsIdBuilder_ = null;
+        }
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
+        }
+        samplingDurationS_ = 0F;
+
+        samplingIntervalS_ = 0F;
+
+        if (startTimestampBuilder_ == null) {
+          startTimestamp_ = null;
+        } else {
+          startTimestamp_ = null;
+          startTimestampBuilder_ = null;
+        }
+        if (endTimestampBuilder_ == null) {
+          endTimestamp_ = null;
+        } else {
+          endTimestamp_ = null;
+          endTimestampBuilder_ = null;
         }
         return this;
       }
@@ -12192,17 +10758,17 @@ public final class Monitoring {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiDescriptorList getDefaultInstanceForType() {
-        return monitoring.Monitoring.KpiDescriptorList.getDefaultInstance();
+      public monitoring.Monitoring.SubsDescriptor getDefaultInstanceForType() {
+        return monitoring.Monitoring.SubsDescriptor.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiDescriptorList build() {
-        monitoring.Monitoring.KpiDescriptorList result = buildPartial();
+      public monitoring.Monitoring.SubsDescriptor build() {
+        monitoring.Monitoring.SubsDescriptor result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -12210,17 +10776,29 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiDescriptorList buildPartial() {
-        monitoring.Monitoring.KpiDescriptorList result = new monitoring.Monitoring.KpiDescriptorList(this);
-        int from_bitField0_ = bitField0_;
-        if (kpiDescriptorListBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            kpiDescriptorList_ = java.util.Collections.unmodifiableList(kpiDescriptorList_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.kpiDescriptorList_ = kpiDescriptorList_;
+      public monitoring.Monitoring.SubsDescriptor buildPartial() {
+        monitoring.Monitoring.SubsDescriptor result = new monitoring.Monitoring.SubsDescriptor(this);
+        if (subsIdBuilder_ == null) {
+          result.subsId_ = subsId_;
         } else {
-          result.kpiDescriptorList_ = kpiDescriptorListBuilder_.build();
+          result.subsId_ = subsIdBuilder_.build();
+        }
+        if (kpiIdBuilder_ == null) {
+          result.kpiId_ = kpiId_;
+        } else {
+          result.kpiId_ = kpiIdBuilder_.build();
+        }
+        result.samplingDurationS_ = samplingDurationS_;
+        result.samplingIntervalS_ = samplingIntervalS_;
+        if (startTimestampBuilder_ == null) {
+          result.startTimestamp_ = startTimestamp_;
+        } else {
+          result.startTimestamp_ = startTimestampBuilder_.build();
+        }
+        if (endTimestampBuilder_ == null) {
+          result.endTimestamp_ = endTimestamp_;
+        } else {
+          result.endTimestamp_ = endTimestampBuilder_.build();
         }
         onBuilt();
         return result;
@@ -12258,312 +10836,673 @@ public final class Monitoring {
           java.lang.Object value) {
         return super.addRepeatedField(field, value);
       }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.KpiDescriptorList) {
-          return mergeFrom((monitoring.Monitoring.KpiDescriptorList)other);
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.SubsDescriptor) {
+          return mergeFrom((monitoring.Monitoring.SubsDescriptor)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(monitoring.Monitoring.SubsDescriptor other) {
+        if (other == monitoring.Monitoring.SubsDescriptor.getDefaultInstance()) return this;
+        if (other.hasSubsId()) {
+          mergeSubsId(other.getSubsId());
+        }
+        if (other.hasKpiId()) {
+          mergeKpiId(other.getKpiId());
+        }
+        if (other.getSamplingDurationS() != 0F) {
+          setSamplingDurationS(other.getSamplingDurationS());
+        }
+        if (other.getSamplingIntervalS() != 0F) {
+          setSamplingIntervalS(other.getSamplingIntervalS());
+        }
+        if (other.hasStartTimestamp()) {
+          mergeStartTimestamp(other.getStartTimestamp());
+        }
+        if (other.hasEndTimestamp()) {
+          mergeEndTimestamp(other.getEndTimestamp());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.SubsDescriptor parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.SubsDescriptor) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private monitoring.Monitoring.SubscriptionID subsId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> subsIdBuilder_;
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       * @return Whether the subsId field is set.
+       */
+      public boolean hasSubsId() {
+        return subsIdBuilder_ != null || subsId_ != null;
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       * @return The subsId.
+       */
+      public monitoring.Monitoring.SubscriptionID getSubsId() {
+        if (subsIdBuilder_ == null) {
+          return subsId_ == null ? monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
+        } else {
+          return subsIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public Builder setSubsId(monitoring.Monitoring.SubscriptionID value) {
+        if (subsIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          subsId_ = value;
+          onChanged();
+        } else {
+          subsIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public Builder setSubsId(
+          monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
+        if (subsIdBuilder_ == null) {
+          subsId_ = builderForValue.build();
+          onChanged();
+        } else {
+          subsIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public Builder mergeSubsId(monitoring.Monitoring.SubscriptionID value) {
+        if (subsIdBuilder_ == null) {
+          if (subsId_ != null) {
+            subsId_ =
+              monitoring.Monitoring.SubscriptionID.newBuilder(subsId_).mergeFrom(value).buildPartial();
+          } else {
+            subsId_ = value;
+          }
+          onChanged();
+        } else {
+          subsIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public Builder clearSubsId() {
+        if (subsIdBuilder_ == null) {
+          subsId_ = null;
+          onChanged();
+        } else {
+          subsId_ = null;
+          subsIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public monitoring.Monitoring.SubscriptionID.Builder getSubsIdBuilder() {
+        
+        onChanged();
+        return getSubsIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder() {
+        if (subsIdBuilder_ != null) {
+          return subsIdBuilder_.getMessageOrBuilder();
+        } else {
+          return subsId_ == null ?
+              monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
+        }
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> 
+          getSubsIdFieldBuilder() {
+        if (subsIdBuilder_ == null) {
+          subsIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder>(
+                  getSubsId(),
+                  getParentForChildren(),
+                  isClean());
+          subsId_ = null;
+        }
+        return subsIdBuilder_;
+      }
+
+      private monitoring.Monitoring.KpiId kpiId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
+      /**
+       * <code>.monitoring.KpiId kpi_id = 2;</code>
+       * @return Whether the kpiId field is set.
+       */
+      public boolean hasKpiId() {
+        return kpiIdBuilder_ != null || kpiId_ != null;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 2;</code>
+       * @return The kpiId.
+       */
+      public monitoring.Monitoring.KpiId getKpiId() {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
         } else {
-          super.mergeFrom(other);
-          return this;
+          return kpiIdBuilder_.getMessage();
         }
       }
-
-      public Builder mergeFrom(monitoring.Monitoring.KpiDescriptorList other) {
-        if (other == monitoring.Monitoring.KpiDescriptorList.getDefaultInstance()) return this;
-        if (kpiDescriptorListBuilder_ == null) {
-          if (!other.kpiDescriptorList_.isEmpty()) {
-            if (kpiDescriptorList_.isEmpty()) {
-              kpiDescriptorList_ = other.kpiDescriptorList_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureKpiDescriptorListIsMutable();
-              kpiDescriptorList_.addAll(other.kpiDescriptorList_);
-            }
-            onChanged();
+      /**
+       * <code>.monitoring.KpiId kpi_id = 2;</code>
+       */
+      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          kpiId_ = value;
+          onChanged();
         } else {
-          if (!other.kpiDescriptorList_.isEmpty()) {
-            if (kpiDescriptorListBuilder_.isEmpty()) {
-              kpiDescriptorListBuilder_.dispose();
-              kpiDescriptorListBuilder_ = null;
-              kpiDescriptorList_ = other.kpiDescriptorList_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              kpiDescriptorListBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getKpiDescriptorListFieldBuilder() : null;
-            } else {
-              kpiDescriptorListBuilder_.addAllMessages(other.kpiDescriptorList_);
-            }
-          }
+          kpiIdBuilder_.setMessage(value);
         }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
+
         return this;
       }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 2;</code>
+       */
+      public Builder setKpiId(
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(builderForValue.build());
+        }
 
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+        return this;
       }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        monitoring.Monitoring.KpiDescriptorList parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.KpiDescriptorList) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
+      /**
+       * <code>.monitoring.KpiId kpi_id = 2;</code>
+       */
+      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (kpiId_ != null) {
+            kpiId_ =
+              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+          } else {
+            kpiId_ = value;
           }
+          onChanged();
+        } else {
+          kpiIdBuilder_.mergeFrom(value);
         }
-        return this;
-      }
-      private int bitField0_;
 
-      private java.util.List<monitoring.Monitoring.KpiDescriptor> kpiDescriptorList_ =
-        java.util.Collections.emptyList();
-      private void ensureKpiDescriptorListIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          kpiDescriptorList_ = new java.util.ArrayList<monitoring.Monitoring.KpiDescriptor>(kpiDescriptorList_);
-          bitField0_ |= 0x00000001;
-         }
+        return this;
       }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiDescriptor.Builder, monitoring.Monitoring.KpiDescriptorOrBuilder> kpiDescriptorListBuilder_;
-
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 2;</code>
        */
-      public java.util.List<monitoring.Monitoring.KpiDescriptor> getKpiDescriptorListList() {
-        if (kpiDescriptorListBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(kpiDescriptorList_);
+      public Builder clearKpiId() {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+          onChanged();
         } else {
-          return kpiDescriptorListBuilder_.getMessageList();
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 2;</code>
        */
-      public int getKpiDescriptorListCount() {
-        if (kpiDescriptorListBuilder_ == null) {
-          return kpiDescriptorList_.size();
+      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
+        
+        onChanged();
+        return getKpiIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 2;</code>
+       */
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+        if (kpiIdBuilder_ != null) {
+          return kpiIdBuilder_.getMessageOrBuilder();
         } else {
-          return kpiDescriptorListBuilder_.getCount();
+          return kpiId_ == null ?
+              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
         }
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 2;</code>
        */
-      public monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index) {
-        if (kpiDescriptorListBuilder_ == null) {
-          return kpiDescriptorList_.get(index);
-        } else {
-          return kpiDescriptorListBuilder_.getMessage(index);
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
+          getKpiIdFieldBuilder() {
+        if (kpiIdBuilder_ == null) {
+          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
+                  getKpiId(),
+                  getParentForChildren(),
+                  isClean());
+          kpiId_ = null;
         }
+        return kpiIdBuilder_;
       }
+
+      private float samplingDurationS_ ;
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <code>float sampling_duration_s = 3;</code>
+       * @return The samplingDurationS.
        */
-      public Builder setKpiDescriptorList(
-          int index, monitoring.Monitoring.KpiDescriptor value) {
-        if (kpiDescriptorListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiDescriptorListIsMutable();
-          kpiDescriptorList_.set(index, value);
-          onChanged();
+      @java.lang.Override
+      public float getSamplingDurationS() {
+        return samplingDurationS_;
+      }
+      /**
+       * <code>float sampling_duration_s = 3;</code>
+       * @param value The samplingDurationS to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSamplingDurationS(float value) {
+        
+        samplingDurationS_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>float sampling_duration_s = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSamplingDurationS() {
+        
+        samplingDurationS_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private float samplingIntervalS_ ;
+      /**
+       * <code>float sampling_interval_s = 4;</code>
+       * @return The samplingIntervalS.
+       */
+      @java.lang.Override
+      public float getSamplingIntervalS() {
+        return samplingIntervalS_;
+      }
+      /**
+       * <code>float sampling_interval_s = 4;</code>
+       * @param value The samplingIntervalS to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSamplingIntervalS(float value) {
+        
+        samplingIntervalS_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>float sampling_interval_s = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSamplingIntervalS() {
+        
+        samplingIntervalS_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private context.ContextOuterClass.Timestamp startTimestamp_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> startTimestampBuilder_;
+      /**
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * @return Whether the startTimestamp field is set.
+       */
+      public boolean hasStartTimestamp() {
+        return startTimestampBuilder_ != null || startTimestamp_ != null;
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * @return The startTimestamp.
+       */
+      public context.ContextOuterClass.Timestamp getStartTimestamp() {
+        if (startTimestampBuilder_ == null) {
+          return startTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : startTimestamp_;
         } else {
-          kpiDescriptorListBuilder_.setMessage(index, value);
+          return startTimestampBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp start_timestamp = 5;</code>
        */
-      public Builder setKpiDescriptorList(
-          int index, monitoring.Monitoring.KpiDescriptor.Builder builderForValue) {
-        if (kpiDescriptorListBuilder_ == null) {
-          ensureKpiDescriptorListIsMutable();
-          kpiDescriptorList_.set(index, builderForValue.build());
+      public Builder setStartTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (startTimestampBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          startTimestamp_ = value;
           onChanged();
         } else {
-          kpiDescriptorListBuilder_.setMessage(index, builderForValue.build());
+          startTimestampBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp start_timestamp = 5;</code>
        */
-      public Builder addKpiDescriptorList(monitoring.Monitoring.KpiDescriptor value) {
-        if (kpiDescriptorListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureKpiDescriptorListIsMutable();
-          kpiDescriptorList_.add(value);
+      public Builder setStartTimestamp(
+          context.ContextOuterClass.Timestamp.Builder builderForValue) {
+        if (startTimestampBuilder_ == null) {
+          startTimestamp_ = builderForValue.build();
           onChanged();
         } else {
-          kpiDescriptorListBuilder_.addMessage(value);
+          startTimestampBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp start_timestamp = 5;</code>
        */
-      public Builder addKpiDescriptorList(
-          int index, monitoring.Monitoring.KpiDescriptor value) {
-        if (kpiDescriptorListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeStartTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (startTimestampBuilder_ == null) {
+          if (startTimestamp_ != null) {
+            startTimestamp_ =
+              context.ContextOuterClass.Timestamp.newBuilder(startTimestamp_).mergeFrom(value).buildPartial();
+          } else {
+            startTimestamp_ = value;
           }
-          ensureKpiDescriptorListIsMutable();
-          kpiDescriptorList_.add(index, value);
           onChanged();
         } else {
-          kpiDescriptorListBuilder_.addMessage(index, value);
+          startTimestampBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp start_timestamp = 5;</code>
        */
-      public Builder addKpiDescriptorList(
-          monitoring.Monitoring.KpiDescriptor.Builder builderForValue) {
-        if (kpiDescriptorListBuilder_ == null) {
-          ensureKpiDescriptorListIsMutable();
-          kpiDescriptorList_.add(builderForValue.build());
+      public Builder clearStartTimestamp() {
+        if (startTimestampBuilder_ == null) {
+          startTimestamp_ = null;
           onChanged();
         } else {
-          kpiDescriptorListBuilder_.addMessage(builderForValue.build());
+          startTimestamp_ = null;
+          startTimestampBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp start_timestamp = 5;</code>
        */
-      public Builder addKpiDescriptorList(
-          int index, monitoring.Monitoring.KpiDescriptor.Builder builderForValue) {
-        if (kpiDescriptorListBuilder_ == null) {
-          ensureKpiDescriptorListIsMutable();
-          kpiDescriptorList_.add(index, builderForValue.build());
-          onChanged();
+      public context.ContextOuterClass.Timestamp.Builder getStartTimestampBuilder() {
+        
+        onChanged();
+        return getStartTimestampFieldBuilder().getBuilder();
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp start_timestamp = 5;</code>
+       */
+      public context.ContextOuterClass.TimestampOrBuilder getStartTimestampOrBuilder() {
+        if (startTimestampBuilder_ != null) {
+          return startTimestampBuilder_.getMessageOrBuilder();
         } else {
-          kpiDescriptorListBuilder_.addMessage(index, builderForValue.build());
+          return startTimestamp_ == null ?
+              context.ContextOuterClass.Timestamp.getDefaultInstance() : startTimestamp_;
         }
-        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp start_timestamp = 5;</code>
        */
-      public Builder addAllKpiDescriptorList(
-          java.lang.Iterable<? extends monitoring.Monitoring.KpiDescriptor> values) {
-        if (kpiDescriptorListBuilder_ == null) {
-          ensureKpiDescriptorListIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, kpiDescriptorList_);
-          onChanged();
-        } else {
-          kpiDescriptorListBuilder_.addAllMessages(values);
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
+          getStartTimestampFieldBuilder() {
+        if (startTimestampBuilder_ == null) {
+          startTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
+                  getStartTimestamp(),
+                  getParentForChildren(),
+                  isClean());
+          startTimestamp_ = null;
         }
-        return this;
+        return startTimestampBuilder_;
       }
+
+      private context.ContextOuterClass.Timestamp endTimestamp_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> endTimestampBuilder_;
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * @return Whether the endTimestamp field is set.
        */
-      public Builder clearKpiDescriptorList() {
-        if (kpiDescriptorListBuilder_ == null) {
-          kpiDescriptorList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
+      public boolean hasEndTimestamp() {
+        return endTimestampBuilder_ != null || endTimestamp_ != null;
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * @return The endTimestamp.
+       */
+      public context.ContextOuterClass.Timestamp getEndTimestamp() {
+        if (endTimestampBuilder_ == null) {
+          return endTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_;
         } else {
-          kpiDescriptorListBuilder_.clear();
+          return endTimestampBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp end_timestamp = 6;</code>
        */
-      public Builder removeKpiDescriptorList(int index) {
-        if (kpiDescriptorListBuilder_ == null) {
-          ensureKpiDescriptorListIsMutable();
-          kpiDescriptorList_.remove(index);
+      public Builder setEndTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (endTimestampBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          endTimestamp_ = value;
           onChanged();
         } else {
-          kpiDescriptorListBuilder_.remove(index);
+          endTimestampBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp end_timestamp = 6;</code>
        */
-      public monitoring.Monitoring.KpiDescriptor.Builder getKpiDescriptorListBuilder(
-          int index) {
-        return getKpiDescriptorListFieldBuilder().getBuilder(index);
+      public Builder setEndTimestamp(
+          context.ContextOuterClass.Timestamp.Builder builderForValue) {
+        if (endTimestampBuilder_ == null) {
+          endTimestamp_ = builderForValue.build();
+          onChanged();
+        } else {
+          endTimestampBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp end_timestamp = 6;</code>
        */
-      public monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder(
-          int index) {
-        if (kpiDescriptorListBuilder_ == null) {
-          return kpiDescriptorList_.get(index);  } else {
-          return kpiDescriptorListBuilder_.getMessageOrBuilder(index);
+      public Builder mergeEndTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (endTimestampBuilder_ == null) {
+          if (endTimestamp_ != null) {
+            endTimestamp_ =
+              context.ContextOuterClass.Timestamp.newBuilder(endTimestamp_).mergeFrom(value).buildPartial();
+          } else {
+            endTimestamp_ = value;
+          }
+          onChanged();
+        } else {
+          endTimestampBuilder_.mergeFrom(value);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp end_timestamp = 6;</code>
        */
-      public java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> 
-           getKpiDescriptorListOrBuilderList() {
-        if (kpiDescriptorListBuilder_ != null) {
-          return kpiDescriptorListBuilder_.getMessageOrBuilderList();
+      public Builder clearEndTimestamp() {
+        if (endTimestampBuilder_ == null) {
+          endTimestamp_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(kpiDescriptorList_);
+          endTimestamp_ = null;
+          endTimestampBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp end_timestamp = 6;</code>
        */
-      public monitoring.Monitoring.KpiDescriptor.Builder addKpiDescriptorListBuilder() {
-        return getKpiDescriptorListFieldBuilder().addBuilder(
-            monitoring.Monitoring.KpiDescriptor.getDefaultInstance());
+      public context.ContextOuterClass.Timestamp.Builder getEndTimestampBuilder() {
+        
+        onChanged();
+        return getEndTimestampFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp end_timestamp = 6;</code>
        */
-      public monitoring.Monitoring.KpiDescriptor.Builder addKpiDescriptorListBuilder(
-          int index) {
-        return getKpiDescriptorListFieldBuilder().addBuilder(
-            index, monitoring.Monitoring.KpiDescriptor.getDefaultInstance());
+      public context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder() {
+        if (endTimestampBuilder_ != null) {
+          return endTimestampBuilder_.getMessageOrBuilder();
+        } else {
+          return endTimestamp_ == null ?
+              context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_;
+        }
       }
       /**
-       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp end_timestamp = 6;</code>
        */
-      public java.util.List<monitoring.Monitoring.KpiDescriptor.Builder> 
-           getKpiDescriptorListBuilderList() {
-        return getKpiDescriptorListFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiDescriptor.Builder, monitoring.Monitoring.KpiDescriptorOrBuilder> 
-          getKpiDescriptorListFieldBuilder() {
-        if (kpiDescriptorListBuilder_ == null) {
-          kpiDescriptorListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiDescriptor.Builder, monitoring.Monitoring.KpiDescriptorOrBuilder>(
-                  kpiDescriptorList_,
-                  ((bitField0_ & 0x00000001) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
+          getEndTimestampFieldBuilder() {
+        if (endTimestampBuilder_ == null) {
+          endTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
+                  getEndTimestamp(),
                   getParentForChildren(),
                   isClean());
-          kpiDescriptorList_ = null;
+          endTimestamp_ = null;
         }
-        return kpiDescriptorListBuilder_;
+        return endTimestampBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -12578,139 +11517,85 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.KpiDescriptorList)
+      // @@protoc_insertion_point(builder_scope:monitoring.SubsDescriptor)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.KpiDescriptorList)
-    private static final monitoring.Monitoring.KpiDescriptorList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.SubsDescriptor)
+    private static final monitoring.Monitoring.SubsDescriptor DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiDescriptorList();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.SubsDescriptor();
     }
 
-    public static monitoring.Monitoring.KpiDescriptorList getDefaultInstance() {
+    public static monitoring.Monitoring.SubsDescriptor getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<KpiDescriptorList>
-        PARSER = new com.google.protobuf.AbstractParser<KpiDescriptorList>() {
+    private static final com.google.protobuf.Parser<SubsDescriptor>
+        PARSER = new com.google.protobuf.AbstractParser<SubsDescriptor>() {
       @java.lang.Override
-      public KpiDescriptorList parsePartialFrom(
+      public SubsDescriptor parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new KpiDescriptorList(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<KpiDescriptorList> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<KpiDescriptorList> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public monitoring.Monitoring.KpiDescriptorList getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface SubsDescriptorOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.SubsDescriptor)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return Whether the kpiId field is set.
-     */
-    boolean hasKpiId();
-    /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return The kpiId.
-     */
-    monitoring.Monitoring.KpiId getKpiId();
-    /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     */
-    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
+        return new SubsDescriptor(input, extensionRegistry);
+      }
+    };
 
-    /**
-     * <code>float sampling_duration_s = 2;</code>
-     * @return The samplingDurationS.
-     */
-    float getSamplingDurationS();
+    public static com.google.protobuf.Parser<SubsDescriptor> parser() {
+      return PARSER;
+    }
 
-    /**
-     * <code>float sampling_interval_s = 3;</code>
-     * @return The samplingIntervalS.
-     */
-    float getSamplingIntervalS();
+    @java.lang.Override
+    public com.google.protobuf.Parser<SubsDescriptor> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.SubsDescriptor getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface SubscriptionIDOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.SubscriptionID)
+      com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>string start_date = 4;</code>
-     * @return The startDate.
-     */
-    java.lang.String getStartDate();
-    /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>string start_date = 4;</code>
-     * @return The bytes for startDate.
+     * <code>.context.Uuid subs_id = 1;</code>
+     * @return Whether the subsId field is set.
      */
-    com.google.protobuf.ByteString
-        getStartDateBytes();
-
+    boolean hasSubsId();
     /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>string end_date = 5;</code>
-     * @return The endDate.
+     * <code>.context.Uuid subs_id = 1;</code>
+     * @return The subsId.
      */
-    java.lang.String getEndDate();
+    context.ContextOuterClass.Uuid getSubsId();
     /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>string end_date = 5;</code>
-     * @return The bytes for endDate.
+     * <code>.context.Uuid subs_id = 1;</code>
      */
-    com.google.protobuf.ByteString
-        getEndDateBytes();
+    context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder();
   }
   /**
-   * Protobuf type {@code monitoring.SubsDescriptor}
+   * Protobuf type {@code monitoring.SubscriptionID}
    */
-  public static final class SubsDescriptor extends
+  public static final class SubscriptionID extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.SubsDescriptor)
-      SubsDescriptorOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.SubscriptionID)
+      SubscriptionIDOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SubsDescriptor.newBuilder() to construct.
-    private SubsDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SubscriptionID.newBuilder() to construct.
+    private SubscriptionID(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SubsDescriptor() {
-      startDate_ = "";
-      endDate_ = "";
+    private SubscriptionID() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SubsDescriptor();
+      return new SubscriptionID();
     }
 
     @java.lang.Override
@@ -12718,7 +11603,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SubsDescriptor(
+    private SubscriptionID(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -12737,40 +11622,18 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              monitoring.Monitoring.KpiId.Builder subBuilder = null;
-              if (kpiId_ != null) {
-                subBuilder = kpiId_.toBuilder();
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (subsId_ != null) {
+                subBuilder = subsId_.toBuilder();
               }
-              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
+              subsId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(kpiId_);
-                kpiId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(subsId_);
+                subsId_ = subBuilder.buildPartial();
               }
 
               break;
             }
-            case 21: {
-
-              samplingDurationS_ = input.readFloat();
-              break;
-            }
-            case 29: {
-
-              samplingIntervalS_ = input.readFloat();
-              break;
-            }
-            case 34: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              startDate_ = s;
-              break;
-            }
-            case 42: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              endDate_ = s;
-              break;
-            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -12792,155 +11655,41 @@ public final class Monitoring {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.SubsDescriptor.class, monitoring.Monitoring.SubsDescriptor.Builder.class);
-    }
-
-    public static final int KPI_ID_FIELD_NUMBER = 1;
-    private monitoring.Monitoring.KpiId kpiId_;
-    /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return Whether the kpiId field is set.
-     */
-    @java.lang.Override
-    public boolean hasKpiId() {
-      return kpiId_ != null;
-    }
-    /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return The kpiId.
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiId getKpiId() {
-      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
-    }
-    /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-      return getKpiId();
-    }
-
-    public static final int SAMPLING_DURATION_S_FIELD_NUMBER = 2;
-    private float samplingDurationS_;
-    /**
-     * <code>float sampling_duration_s = 2;</code>
-     * @return The samplingDurationS.
-     */
-    @java.lang.Override
-    public float getSamplingDurationS() {
-      return samplingDurationS_;
-    }
-
-    public static final int SAMPLING_INTERVAL_S_FIELD_NUMBER = 3;
-    private float samplingIntervalS_;
-    /**
-     * <code>float sampling_interval_s = 3;</code>
-     * @return The samplingIntervalS.
-     */
-    @java.lang.Override
-    public float getSamplingIntervalS() {
-      return samplingIntervalS_;
+              monitoring.Monitoring.SubscriptionID.class, monitoring.Monitoring.SubscriptionID.Builder.class);
     }
 
-    public static final int START_DATE_FIELD_NUMBER = 4;
-    private volatile java.lang.Object startDate_;
-    /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>string start_date = 4;</code>
-     * @return The startDate.
-     */
-    @java.lang.Override
-    public java.lang.String getStartDate() {
-      java.lang.Object ref = startDate_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        startDate_ = s;
-        return s;
-      }
-    }
+    public static final int SUBS_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid subsId_;
     /**
-     * <pre>
-     * used when you want something like "get the samples since X date/time"
-     * </pre>
-     *
-     * <code>string start_date = 4;</code>
-     * @return The bytes for startDate.
+     * <code>.context.Uuid subs_id = 1;</code>
+     * @return Whether the subsId field is set.
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getStartDateBytes() {
-      java.lang.Object ref = startDate_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        startDate_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public boolean hasSubsId() {
+      return subsId_ != null;
     }
-
-    public static final int END_DATE_FIELD_NUMBER = 5;
-    private volatile java.lang.Object endDate_;
     /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>string end_date = 5;</code>
-     * @return The endDate.
+     * <code>.context.Uuid subs_id = 1;</code>
+     * @return The subsId.
      */
     @java.lang.Override
-    public java.lang.String getEndDate() {
-      java.lang.Object ref = endDate_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        endDate_ = s;
-        return s;
-      }
+    public context.ContextOuterClass.Uuid getSubsId() {
+      return subsId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_;
     }
     /**
-     * <pre>
-     * used when you want something like "get the samples until X date/time"
-     * </pre>
-     *
-     * <code>string end_date = 5;</code>
-     * @return The bytes for endDate.
+     * <code>.context.Uuid subs_id = 1;</code>
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getEndDateBytes() {
-      java.lang.Object ref = endDate_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        endDate_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder() {
+      return getSubsId();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -12957,20 +11706,8 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (kpiId_ != null) {
-        output.writeMessage(1, getKpiId());
-      }
-      if (samplingDurationS_ != 0F) {
-        output.writeFloat(2, samplingDurationS_);
-      }
-      if (samplingIntervalS_ != 0F) {
-        output.writeFloat(3, samplingIntervalS_);
-      }
-      if (!getStartDateBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, startDate_);
-      }
-      if (!getEndDateBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, endDate_);
+      if (subsId_ != null) {
+        output.writeMessage(1, getSubsId());
       }
       unknownFields.writeTo(output);
     }
@@ -12981,23 +11718,9 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (kpiId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getKpiId());
-      }
-      if (samplingDurationS_ != 0F) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(2, samplingDurationS_);
-      }
-      if (samplingIntervalS_ != 0F) {
+      if (subsId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(3, samplingIntervalS_);
-      }
-      if (!getStartDateBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, startDate_);
-      }
-      if (!getEndDateBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, endDate_);
+          .computeMessageSize(1, getSubsId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -13009,26 +11732,16 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.SubsDescriptor)) {
+      if (!(obj instanceof monitoring.Monitoring.SubscriptionID)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.SubsDescriptor other = (monitoring.Monitoring.SubsDescriptor) obj;
+      monitoring.Monitoring.SubscriptionID other = (monitoring.Monitoring.SubscriptionID) obj;
 
-      if (hasKpiId() != other.hasKpiId()) return false;
-      if (hasKpiId()) {
-        if (!getKpiId()
-            .equals(other.getKpiId())) return false;
+      if (hasSubsId() != other.hasSubsId()) return false;
+      if (hasSubsId()) {
+        if (!getSubsId()
+            .equals(other.getSubsId())) return false;
       }
-      if (java.lang.Float.floatToIntBits(getSamplingDurationS())
-          != java.lang.Float.floatToIntBits(
-              other.getSamplingDurationS())) return false;
-      if (java.lang.Float.floatToIntBits(getSamplingIntervalS())
-          != java.lang.Float.floatToIntBits(
-              other.getSamplingIntervalS())) return false;
-      if (!getStartDate()
-          .equals(other.getStartDate())) return false;
-      if (!getEndDate()
-          .equals(other.getEndDate())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -13040,88 +11753,78 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasKpiId()) {
-        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiId().hashCode();
+      if (hasSubsId()) {
+        hash = (37 * hash) + SUBS_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getSubsId().hashCode();
       }
-      hash = (37 * hash) + SAMPLING_DURATION_S_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getSamplingDurationS());
-      hash = (37 * hash) + SAMPLING_INTERVAL_S_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getSamplingIntervalS());
-      hash = (37 * hash) + START_DATE_FIELD_NUMBER;
-      hash = (53 * hash) + getStartDate().hashCode();
-      hash = (37 * hash) + END_DATE_FIELD_NUMBER;
-      hash = (53 * hash) + getEndDate().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(byte[] data)
+    public static monitoring.Monitoring.SubscriptionID parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.SubscriptionID parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.SubscriptionID parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseDelimitedFrom(
+    public static monitoring.Monitoring.SubscriptionID parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -13134,7 +11837,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.SubsDescriptor prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.SubscriptionID prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -13150,26 +11853,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.SubsDescriptor}
+     * Protobuf type {@code monitoring.SubscriptionID}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.SubsDescriptor)
-        monitoring.Monitoring.SubsDescriptorOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.SubscriptionID)
+        monitoring.Monitoring.SubscriptionIDOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.SubsDescriptor.class, monitoring.Monitoring.SubsDescriptor.Builder.class);
+                monitoring.Monitoring.SubscriptionID.class, monitoring.Monitoring.SubscriptionID.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.SubsDescriptor.newBuilder()
+      // Construct using monitoring.Monitoring.SubscriptionID.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -13187,37 +11890,29 @@ public final class Monitoring {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
+        if (subsIdBuilder_ == null) {
+          subsId_ = null;
         } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
+          subsId_ = null;
+          subsIdBuilder_ = null;
         }
-        samplingDurationS_ = 0F;
-
-        samplingIntervalS_ = 0F;
-
-        startDate_ = "";
-
-        endDate_ = "";
-
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.SubsDescriptor getDefaultInstanceForType() {
-        return monitoring.Monitoring.SubsDescriptor.getDefaultInstance();
+      public monitoring.Monitoring.SubscriptionID getDefaultInstanceForType() {
+        return monitoring.Monitoring.SubscriptionID.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.SubsDescriptor build() {
-        monitoring.Monitoring.SubsDescriptor result = buildPartial();
+      public monitoring.Monitoring.SubscriptionID build() {
+        monitoring.Monitoring.SubscriptionID result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -13225,17 +11920,13 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.SubsDescriptor buildPartial() {
-        monitoring.Monitoring.SubsDescriptor result = new monitoring.Monitoring.SubsDescriptor(this);
-        if (kpiIdBuilder_ == null) {
-          result.kpiId_ = kpiId_;
+      public monitoring.Monitoring.SubscriptionID buildPartial() {
+        monitoring.Monitoring.SubscriptionID result = new monitoring.Monitoring.SubscriptionID(this);
+        if (subsIdBuilder_ == null) {
+          result.subsId_ = subsId_;
         } else {
-          result.kpiId_ = kpiIdBuilder_.build();
+          result.subsId_ = subsIdBuilder_.build();
         }
-        result.samplingDurationS_ = samplingDurationS_;
-        result.samplingIntervalS_ = samplingIntervalS_;
-        result.startDate_ = startDate_;
-        result.endDate_ = endDate_;
         onBuilt();
         return result;
       }
@@ -13250,457 +11941,189 @@ public final class Monitoring {
           java.lang.Object value) {
         return super.setField(field, value);
       }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.SubsDescriptor) {
-          return mergeFrom((monitoring.Monitoring.SubsDescriptor)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(monitoring.Monitoring.SubsDescriptor other) {
-        if (other == monitoring.Monitoring.SubsDescriptor.getDefaultInstance()) return this;
-        if (other.hasKpiId()) {
-          mergeKpiId(other.getKpiId());
-        }
-        if (other.getSamplingDurationS() != 0F) {
-          setSamplingDurationS(other.getSamplingDurationS());
-        }
-        if (other.getSamplingIntervalS() != 0F) {
-          setSamplingIntervalS(other.getSamplingIntervalS());
-        }
-        if (!other.getStartDate().isEmpty()) {
-          startDate_ = other.startDate_;
-          onChanged();
-        }
-        if (!other.getEndDate().isEmpty()) {
-          endDate_ = other.endDate_;
-          onChanged();
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        monitoring.Monitoring.SubsDescriptor parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.SubsDescriptor) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private monitoring.Monitoring.KpiId kpiId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       * @return Whether the kpiId field is set.
-       */
-      public boolean hasKpiId() {
-        return kpiIdBuilder_ != null || kpiId_ != null;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       * @return The kpiId.
-       */
-      public monitoring.Monitoring.KpiId getKpiId() {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
-        } else {
-          return kpiIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          kpiId_ = value;
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder setKpiId(
-          monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = builderForValue.build();
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (kpiId_ != null) {
-            kpiId_ =
-              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
-          } else {
-            kpiId_ = value;
-          }
-          onChanged();
-        } else {
-          kpiIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder clearKpiId() {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
-          onChanged();
-        } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
-        
-        onChanged();
-        return getKpiIdFieldBuilder().getBuilder();
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
       }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-        if (kpiIdBuilder_ != null) {
-          return kpiIdBuilder_.getMessageOrBuilder();
-        } else {
-          return kpiId_ == null ?
-              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
-        }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
       }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
-          getKpiIdFieldBuilder() {
-        if (kpiIdBuilder_ == null) {
-          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
-                  getKpiId(),
-                  getParentForChildren(),
-                  isClean());
-          kpiId_ = null;
-        }
-        return kpiIdBuilder_;
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
       }
-
-      private float samplingDurationS_ ;
-      /**
-       * <code>float sampling_duration_s = 2;</code>
-       * @return The samplingDurationS.
-       */
       @java.lang.Override
-      public float getSamplingDurationS() {
-        return samplingDurationS_;
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
       }
-      /**
-       * <code>float sampling_duration_s = 2;</code>
-       * @param value The samplingDurationS to set.
-       * @return This builder for chaining.
-       */
-      public Builder setSamplingDurationS(float value) {
-        
-        samplingDurationS_ = value;
-        onChanged();
-        return this;
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.SubscriptionID) {
+          return mergeFrom((monitoring.Monitoring.SubscriptionID)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
       }
-      /**
-       * <code>float sampling_duration_s = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearSamplingDurationS() {
-        
-        samplingDurationS_ = 0F;
+
+      public Builder mergeFrom(monitoring.Monitoring.SubscriptionID other) {
+        if (other == monitoring.Monitoring.SubscriptionID.getDefaultInstance()) return this;
+        if (other.hasSubsId()) {
+          mergeSubsId(other.getSubsId());
+        }
+        this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
       }
 
-      private float samplingIntervalS_ ;
-      /**
-       * <code>float sampling_interval_s = 3;</code>
-       * @return The samplingIntervalS.
-       */
       @java.lang.Override
-      public float getSamplingIntervalS() {
-        return samplingIntervalS_;
+      public final boolean isInitialized() {
+        return true;
       }
-      /**
-       * <code>float sampling_interval_s = 3;</code>
-       * @param value The samplingIntervalS to set.
-       * @return This builder for chaining.
-       */
-      public Builder setSamplingIntervalS(float value) {
-        
-        samplingIntervalS_ = value;
-        onChanged();
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.SubscriptionID parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.SubscriptionID) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
         return this;
       }
+
+      private context.ContextOuterClass.Uuid subsId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> subsIdBuilder_;
       /**
-       * <code>float sampling_interval_s = 3;</code>
-       * @return This builder for chaining.
+       * <code>.context.Uuid subs_id = 1;</code>
+       * @return Whether the subsId field is set.
        */
-      public Builder clearSamplingIntervalS() {
-        
-        samplingIntervalS_ = 0F;
-        onChanged();
-        return this;
+      public boolean hasSubsId() {
+        return subsIdBuilder_ != null || subsId_ != null;
       }
-
-      private java.lang.Object startDate_ = "";
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>string start_date = 4;</code>
-       * @return The startDate.
+       * <code>.context.Uuid subs_id = 1;</code>
+       * @return The subsId.
        */
-      public java.lang.String getStartDate() {
-        java.lang.Object ref = startDate_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          startDate_ = s;
-          return s;
+      public context.ContextOuterClass.Uuid getSubsId() {
+        if (subsIdBuilder_ == null) {
+          return subsId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_;
         } else {
-          return (java.lang.String) ref;
+          return subsIdBuilder_.getMessage();
         }
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>string start_date = 4;</code>
-       * @return The bytes for startDate.
+       * <code>.context.Uuid subs_id = 1;</code>
        */
-      public com.google.protobuf.ByteString
-          getStartDateBytes() {
-        java.lang.Object ref = startDate_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          startDate_ = b;
-          return b;
+      public Builder setSubsId(context.ContextOuterClass.Uuid value) {
+        if (subsIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          subsId_ = value;
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          subsIdBuilder_.setMessage(value);
         }
-      }
-      /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>string start_date = 4;</code>
-       * @param value The startDate to set.
-       * @return This builder for chaining.
-       */
-      public Builder setStartDate(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        startDate_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>string start_date = 4;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearStartDate() {
-        
-        startDate_ = getDefaultInstance().getStartDate();
-        onChanged();
+
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>string start_date = 4;</code>
-       * @param value The bytes for startDate to set.
-       * @return This builder for chaining.
+       * <code>.context.Uuid subs_id = 1;</code>
        */
-      public Builder setStartDateBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        startDate_ = value;
-        onChanged();
+      public Builder setSubsId(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (subsIdBuilder_ == null) {
+          subsId_ = builderForValue.build();
+          onChanged();
+        } else {
+          subsIdBuilder_.setMessage(builderForValue.build());
+        }
+
         return this;
       }
-
-      private java.lang.Object endDate_ = "";
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>string end_date = 5;</code>
-       * @return The endDate.
+       * <code>.context.Uuid subs_id = 1;</code>
        */
-      public java.lang.String getEndDate() {
-        java.lang.Object ref = endDate_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          endDate_ = s;
-          return s;
+      public Builder mergeSubsId(context.ContextOuterClass.Uuid value) {
+        if (subsIdBuilder_ == null) {
+          if (subsId_ != null) {
+            subsId_ =
+              context.ContextOuterClass.Uuid.newBuilder(subsId_).mergeFrom(value).buildPartial();
+          } else {
+            subsId_ = value;
+          }
+          onChanged();
         } else {
-          return (java.lang.String) ref;
+          subsIdBuilder_.mergeFrom(value);
         }
+
+        return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>string end_date = 5;</code>
-       * @return The bytes for endDate.
+       * <code>.context.Uuid subs_id = 1;</code>
        */
-      public com.google.protobuf.ByteString
-          getEndDateBytes() {
-        java.lang.Object ref = endDate_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          endDate_ = b;
-          return b;
+      public Builder clearSubsId() {
+        if (subsIdBuilder_ == null) {
+          subsId_ = null;
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          subsId_ = null;
+          subsIdBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>string end_date = 5;</code>
-       * @param value The endDate to set.
-       * @return This builder for chaining.
+       * <code>.context.Uuid subs_id = 1;</code>
        */
-      public Builder setEndDate(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        endDate_ = value;
+      public context.ContextOuterClass.Uuid.Builder getSubsIdBuilder() {
+        
         onChanged();
-        return this;
+        return getSubsIdFieldBuilder().getBuilder();
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>string end_date = 5;</code>
-       * @return This builder for chaining.
+       * <code>.context.Uuid subs_id = 1;</code>
        */
-      public Builder clearEndDate() {
-        
-        endDate_ = getDefaultInstance().getEndDate();
-        onChanged();
-        return this;
+      public context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder() {
+        if (subsIdBuilder_ != null) {
+          return subsIdBuilder_.getMessageOrBuilder();
+        } else {
+          return subsId_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_;
+        }
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>string end_date = 5;</code>
-       * @param value The bytes for endDate to set.
-       * @return This builder for chaining.
+       * <code>.context.Uuid subs_id = 1;</code>
        */
-      public Builder setEndDateBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        endDate_ = value;
-        onChanged();
-        return this;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getSubsIdFieldBuilder() {
+        if (subsIdBuilder_ == null) {
+          subsIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getSubsId(),
+                  getParentForChildren(),
+                  isClean());
+          subsId_ = null;
+        }
+        return subsIdBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -13715,85 +12138,110 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.SubsDescriptor)
+      // @@protoc_insertion_point(builder_scope:monitoring.SubscriptionID)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.SubsDescriptor)
-    private static final monitoring.Monitoring.SubsDescriptor DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.SubscriptionID)
+    private static final monitoring.Monitoring.SubscriptionID DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.SubsDescriptor();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.SubscriptionID();
     }
 
-    public static monitoring.Monitoring.SubsDescriptor getDefaultInstance() {
+    public static monitoring.Monitoring.SubscriptionID getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SubsDescriptor>
-        PARSER = new com.google.protobuf.AbstractParser<SubsDescriptor>() {
+    private static final com.google.protobuf.Parser<SubscriptionID>
+        PARSER = new com.google.protobuf.AbstractParser<SubscriptionID>() {
       @java.lang.Override
-      public SubsDescriptor parsePartialFrom(
+      public SubscriptionID parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SubsDescriptor(input, extensionRegistry);
+        return new SubscriptionID(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SubsDescriptor> parser() {
+    public static com.google.protobuf.Parser<SubscriptionID> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SubsDescriptor> getParserForType() {
+    public com.google.protobuf.Parser<SubscriptionID> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.SubsDescriptor getDefaultInstanceForType() {
+    public monitoring.Monitoring.SubscriptionID getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SubscriptionIDOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.SubscriptionID)
+  public interface SubsResponseOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.SubsResponse)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Uuid subs_id = 1;</code>
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
      * @return Whether the subsId field is set.
      */
     boolean hasSubsId();
     /**
-     * <code>.context.Uuid subs_id = 1;</code>
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
      * @return The subsId.
      */
-    context.ContextOuterClass.Uuid getSubsId();
+    monitoring.Monitoring.SubscriptionID getSubsId();
     /**
-     * <code>.context.Uuid subs_id = 1;</code>
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder();
+    monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder();
+
+    /**
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     */
+    java.util.List<monitoring.Monitoring.KpiList> 
+        getKpiListList();
+    /**
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     */
+    monitoring.Monitoring.KpiList getKpiList(int index);
+    /**
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     */
+    int getKpiListCount();
+    /**
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     */
+    java.util.List<? extends monitoring.Monitoring.KpiListOrBuilder> 
+        getKpiListOrBuilderList();
+    /**
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     */
+    monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder(
+        int index);
   }
   /**
-   * Protobuf type {@code monitoring.SubscriptionID}
+   * Protobuf type {@code monitoring.SubsResponse}
    */
-  public static final class SubscriptionID extends
+  public static final class SubsResponse extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.SubscriptionID)
-      SubscriptionIDOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.SubsResponse)
+      SubsResponseOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SubscriptionID.newBuilder() to construct.
-    private SubscriptionID(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SubsResponse.newBuilder() to construct.
+    private SubsResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SubscriptionID() {
+    private SubsResponse() {
+      kpiList_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SubscriptionID();
+      return new SubsResponse();
     }
 
     @java.lang.Override
@@ -13801,7 +12249,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SubscriptionID(
+    private SubsResponse(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -13809,6 +12257,7 @@ public final class Monitoring {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -13820,11 +12269,11 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              monitoring.Monitoring.SubscriptionID.Builder subBuilder = null;
               if (subsId_ != null) {
                 subBuilder = subsId_.toBuilder();
               }
-              subsId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              subsId_ = input.readMessage(monitoring.Monitoring.SubscriptionID.parser(), extensionRegistry);
               if (subBuilder != null) {
                 subBuilder.mergeFrom(subsId_);
                 subsId_ = subBuilder.buildPartial();
@@ -13832,6 +12281,15 @@ public final class Monitoring {
 
               break;
             }
+            case 18: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                kpiList_ = new java.util.ArrayList<monitoring.Monitoring.KpiList>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              kpiList_.add(
+                  input.readMessage(monitoring.Monitoring.KpiList.parser(), extensionRegistry));
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -13847,27 +12305,30 @@ public final class Monitoring {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_SubsResponse_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_SubsResponse_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.SubscriptionID.class, monitoring.Monitoring.SubscriptionID.Builder.class);
+              monitoring.Monitoring.SubsResponse.class, monitoring.Monitoring.SubsResponse.Builder.class);
     }
 
     public static final int SUBS_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Uuid subsId_;
+    private monitoring.Monitoring.SubscriptionID subsId_;
     /**
-     * <code>.context.Uuid subs_id = 1;</code>
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
      * @return Whether the subsId field is set.
      */
     @java.lang.Override
@@ -13875,21 +12336,61 @@ public final class Monitoring {
       return subsId_ != null;
     }
     /**
-     * <code>.context.Uuid subs_id = 1;</code>
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
      * @return The subsId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getSubsId() {
-      return subsId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_;
+    public monitoring.Monitoring.SubscriptionID getSubsId() {
+      return subsId_ == null ? monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
     }
     /**
-     * <code>.context.Uuid subs_id = 1;</code>
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder() {
+    public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder() {
       return getSubsId();
     }
 
+    public static final int KPI_LIST_FIELD_NUMBER = 2;
+    private java.util.List<monitoring.Monitoring.KpiList> kpiList_;
+    /**
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     */
+    @java.lang.Override
+    public java.util.List<monitoring.Monitoring.KpiList> getKpiListList() {
+      return kpiList_;
+    }
+    /**
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends monitoring.Monitoring.KpiListOrBuilder> 
+        getKpiListOrBuilderList() {
+      return kpiList_;
+    }
+    /**
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     */
+    @java.lang.Override
+    public int getKpiListCount() {
+      return kpiList_.size();
+    }
+    /**
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiList getKpiList(int index) {
+      return kpiList_.get(index);
+    }
+    /**
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder(
+        int index) {
+      return kpiList_.get(index);
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -13907,6 +12408,9 @@ public final class Monitoring {
       if (subsId_ != null) {
         output.writeMessage(1, getSubsId());
       }
+      for (int i = 0; i < kpiList_.size(); i++) {
+        output.writeMessage(2, kpiList_.get(i));
+      }
       unknownFields.writeTo(output);
     }
 
@@ -13920,6 +12424,10 @@ public final class Monitoring {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(1, getSubsId());
       }
+      for (int i = 0; i < kpiList_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, kpiList_.get(i));
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -13930,16 +12438,18 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.SubscriptionID)) {
+      if (!(obj instanceof monitoring.Monitoring.SubsResponse)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.SubscriptionID other = (monitoring.Monitoring.SubscriptionID) obj;
+      monitoring.Monitoring.SubsResponse other = (monitoring.Monitoring.SubsResponse) obj;
 
       if (hasSubsId() != other.hasSubsId()) return false;
       if (hasSubsId()) {
         if (!getSubsId()
             .equals(other.getSubsId())) return false;
       }
+      if (!getKpiListList()
+          .equals(other.getKpiListList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -13955,74 +12465,78 @@ public final class Monitoring {
         hash = (37 * hash) + SUBS_ID_FIELD_NUMBER;
         hash = (53 * hash) + getSubsId().hashCode();
       }
+      if (getKpiListCount() > 0) {
+        hash = (37 * hash) + KPI_LIST_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiListList().hashCode();
+      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.SubscriptionID parseFrom(
+    public static monitoring.Monitoring.SubsResponse parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubscriptionID parseFrom(
+    public static monitoring.Monitoring.SubsResponse parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubscriptionID parseFrom(
+    public static monitoring.Monitoring.SubsResponse parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubscriptionID parseFrom(
+    public static monitoring.Monitoring.SubsResponse parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubscriptionID parseFrom(byte[] data)
+    public static monitoring.Monitoring.SubsResponse parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubscriptionID parseFrom(
+    public static monitoring.Monitoring.SubsResponse parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubscriptionID parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.SubsResponse parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubscriptionID parseFrom(
+    public static monitoring.Monitoring.SubsResponse parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubscriptionID parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.SubsResponse parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubscriptionID parseDelimitedFrom(
+    public static monitoring.Monitoring.SubsResponse parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubscriptionID parseFrom(
+    public static monitoring.Monitoring.SubsResponse parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubscriptionID parseFrom(
+    public static monitoring.Monitoring.SubsResponse parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -14035,7 +12549,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.SubscriptionID prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.SubsResponse prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -14051,26 +12565,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.SubscriptionID}
+     * Protobuf type {@code monitoring.SubsResponse}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.SubscriptionID)
-        monitoring.Monitoring.SubscriptionIDOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.SubsResponse)
+        monitoring.Monitoring.SubsResponseOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_SubsResponse_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_SubsResponse_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.SubscriptionID.class, monitoring.Monitoring.SubscriptionID.Builder.class);
+                monitoring.Monitoring.SubsResponse.class, monitoring.Monitoring.SubsResponse.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.SubscriptionID.newBuilder()
+      // Construct using monitoring.Monitoring.SubsResponse.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -14083,6 +12597,7 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getKpiListFieldBuilder();
         }
       }
       @java.lang.Override
@@ -14094,23 +12609,29 @@ public final class Monitoring {
           subsId_ = null;
           subsIdBuilder_ = null;
         }
+        if (kpiListBuilder_ == null) {
+          kpiList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          kpiListBuilder_.clear();
+        }
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_SubsResponse_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.SubscriptionID getDefaultInstanceForType() {
-        return monitoring.Monitoring.SubscriptionID.getDefaultInstance();
+      public monitoring.Monitoring.SubsResponse getDefaultInstanceForType() {
+        return monitoring.Monitoring.SubsResponse.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.SubscriptionID build() {
-        monitoring.Monitoring.SubscriptionID result = buildPartial();
+      public monitoring.Monitoring.SubsResponse build() {
+        monitoring.Monitoring.SubsResponse result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -14118,13 +12639,23 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.SubscriptionID buildPartial() {
-        monitoring.Monitoring.SubscriptionID result = new monitoring.Monitoring.SubscriptionID(this);
+      public monitoring.Monitoring.SubsResponse buildPartial() {
+        monitoring.Monitoring.SubsResponse result = new monitoring.Monitoring.SubsResponse(this);
+        int from_bitField0_ = bitField0_;
         if (subsIdBuilder_ == null) {
           result.subsId_ = subsId_;
         } else {
           result.subsId_ = subsIdBuilder_.build();
         }
+        if (kpiListBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.kpiList_ = kpiList_;
+        } else {
+          result.kpiList_ = kpiListBuilder_.build();
+        }
         onBuilt();
         return result;
       }
@@ -14163,19 +12694,45 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.SubscriptionID) {
-          return mergeFrom((monitoring.Monitoring.SubscriptionID)other);
+        if (other instanceof monitoring.Monitoring.SubsResponse) {
+          return mergeFrom((monitoring.Monitoring.SubsResponse)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.SubscriptionID other) {
-        if (other == monitoring.Monitoring.SubscriptionID.getDefaultInstance()) return this;
+      public Builder mergeFrom(monitoring.Monitoring.SubsResponse other) {
+        if (other == monitoring.Monitoring.SubsResponse.getDefaultInstance()) return this;
         if (other.hasSubsId()) {
           mergeSubsId(other.getSubsId());
         }
+        if (kpiListBuilder_ == null) {
+          if (!other.kpiList_.isEmpty()) {
+            if (kpiList_.isEmpty()) {
+              kpiList_ = other.kpiList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureKpiListIsMutable();
+              kpiList_.addAll(other.kpiList_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.kpiList_.isEmpty()) {
+            if (kpiListBuilder_.isEmpty()) {
+              kpiListBuilder_.dispose();
+              kpiListBuilder_ = null;
+              kpiList_ = other.kpiList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              kpiListBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getKpiListFieldBuilder() : null;
+            } else {
+              kpiListBuilder_.addAllMessages(other.kpiList_);
+            }
+          }
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -14191,11 +12748,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.SubscriptionID parsedMessage = null;
+        monitoring.Monitoring.SubsResponse parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.SubscriptionID) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.SubsResponse) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -14204,124 +12761,365 @@ public final class Monitoring {
         }
         return this;
       }
-
-      private context.ContextOuterClass.Uuid subsId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> subsIdBuilder_;
+      private int bitField0_;
+
+      private monitoring.Monitoring.SubscriptionID subsId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> subsIdBuilder_;
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       * @return Whether the subsId field is set.
+       */
+      public boolean hasSubsId() {
+        return subsIdBuilder_ != null || subsId_ != null;
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       * @return The subsId.
+       */
+      public monitoring.Monitoring.SubscriptionID getSubsId() {
+        if (subsIdBuilder_ == null) {
+          return subsId_ == null ? monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
+        } else {
+          return subsIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public Builder setSubsId(monitoring.Monitoring.SubscriptionID value) {
+        if (subsIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          subsId_ = value;
+          onChanged();
+        } else {
+          subsIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public Builder setSubsId(
+          monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
+        if (subsIdBuilder_ == null) {
+          subsId_ = builderForValue.build();
+          onChanged();
+        } else {
+          subsIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public Builder mergeSubsId(monitoring.Monitoring.SubscriptionID value) {
+        if (subsIdBuilder_ == null) {
+          if (subsId_ != null) {
+            subsId_ =
+              monitoring.Monitoring.SubscriptionID.newBuilder(subsId_).mergeFrom(value).buildPartial();
+          } else {
+            subsId_ = value;
+          }
+          onChanged();
+        } else {
+          subsIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public Builder clearSubsId() {
+        if (subsIdBuilder_ == null) {
+          subsId_ = null;
+          onChanged();
+        } else {
+          subsId_ = null;
+          subsIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public monitoring.Monitoring.SubscriptionID.Builder getSubsIdBuilder() {
+        
+        onChanged();
+        return getSubsIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder() {
+        if (subsIdBuilder_ != null) {
+          return subsIdBuilder_.getMessageOrBuilder();
+        } else {
+          return subsId_ == null ?
+              monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
+        }
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> 
+          getSubsIdFieldBuilder() {
+        if (subsIdBuilder_ == null) {
+          subsIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder>(
+                  getSubsId(),
+                  getParentForChildren(),
+                  isClean());
+          subsId_ = null;
+        }
+        return subsIdBuilder_;
+      }
+
+      private java.util.List<monitoring.Monitoring.KpiList> kpiList_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiListIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiList_ = new java.util.ArrayList<monitoring.Monitoring.KpiList>(kpiList_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiList, monitoring.Monitoring.KpiList.Builder, monitoring.Monitoring.KpiListOrBuilder> kpiListBuilder_;
+
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiList> getKpiListList() {
+        if (kpiListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(kpiList_);
+        } else {
+          return kpiListBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public int getKpiListCount() {
+        if (kpiListBuilder_ == null) {
+          return kpiList_.size();
+        } else {
+          return kpiListBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public monitoring.Monitoring.KpiList getKpiList(int index) {
+        if (kpiListBuilder_ == null) {
+          return kpiList_.get(index);
+        } else {
+          return kpiListBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public Builder setKpiList(
+          int index, monitoring.Monitoring.KpiList value) {
+        if (kpiListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiListIsMutable();
+          kpiList_.set(index, value);
+          onChanged();
+        } else {
+          kpiListBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
       /**
-       * <code>.context.Uuid subs_id = 1;</code>
-       * @return Whether the subsId field is set.
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public boolean hasSubsId() {
-        return subsIdBuilder_ != null || subsId_ != null;
+      public Builder setKpiList(
+          int index, monitoring.Monitoring.KpiList.Builder builderForValue) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiListBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
       }
       /**
-       * <code>.context.Uuid subs_id = 1;</code>
-       * @return The subsId.
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public context.ContextOuterClass.Uuid getSubsId() {
-        if (subsIdBuilder_ == null) {
-          return subsId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_;
+      public Builder addKpiList(monitoring.Monitoring.KpiList value) {
+        if (kpiListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiListIsMutable();
+          kpiList_.add(value);
+          onChanged();
         } else {
-          return subsIdBuilder_.getMessage();
+          kpiListBuilder_.addMessage(value);
         }
+        return this;
       }
       /**
-       * <code>.context.Uuid subs_id = 1;</code>
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public Builder setSubsId(context.ContextOuterClass.Uuid value) {
-        if (subsIdBuilder_ == null) {
+      public Builder addKpiList(
+          int index, monitoring.Monitoring.KpiList value) {
+        if (kpiListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          subsId_ = value;
+          ensureKpiListIsMutable();
+          kpiList_.add(index, value);
           onChanged();
         } else {
-          subsIdBuilder_.setMessage(value);
+          kpiListBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid subs_id = 1;</code>
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public Builder setSubsId(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (subsIdBuilder_ == null) {
-          subsId_ = builderForValue.build();
+      public Builder addKpiList(
+          monitoring.Monitoring.KpiList.Builder builderForValue) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.add(builderForValue.build());
           onChanged();
         } else {
-          subsIdBuilder_.setMessage(builderForValue.build());
+          kpiListBuilder_.addMessage(builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid subs_id = 1;</code>
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public Builder mergeSubsId(context.ContextOuterClass.Uuid value) {
-        if (subsIdBuilder_ == null) {
-          if (subsId_ != null) {
-            subsId_ =
-              context.ContextOuterClass.Uuid.newBuilder(subsId_).mergeFrom(value).buildPartial();
-          } else {
-            subsId_ = value;
-          }
+      public Builder addKpiList(
+          int index, monitoring.Monitoring.KpiList.Builder builderForValue) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.add(index, builderForValue.build());
           onChanged();
         } else {
-          subsIdBuilder_.mergeFrom(value);
+          kpiListBuilder_.addMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid subs_id = 1;</code>
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public Builder clearSubsId() {
-        if (subsIdBuilder_ == null) {
-          subsId_ = null;
+      public Builder addAllKpiList(
+          java.lang.Iterable<? extends monitoring.Monitoring.KpiList> values) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, kpiList_);
           onChanged();
         } else {
-          subsId_ = null;
-          subsIdBuilder_ = null;
+          kpiListBuilder_.addAllMessages(values);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid subs_id = 1;</code>
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getSubsIdBuilder() {
-        
-        onChanged();
-        return getSubsIdFieldBuilder().getBuilder();
+      public Builder clearKpiList() {
+        if (kpiListBuilder_ == null) {
+          kpiList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          kpiListBuilder_.clear();
+        }
+        return this;
       }
       /**
-       * <code>.context.Uuid subs_id = 1;</code>
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder() {
-        if (subsIdBuilder_ != null) {
-          return subsIdBuilder_.getMessageOrBuilder();
+      public Builder removeKpiList(int index) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.remove(index);
+          onChanged();
         } else {
-          return subsId_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_;
+          kpiListBuilder_.remove(index);
         }
+        return this;
       }
       /**
-       * <code>.context.Uuid subs_id = 1;</code>
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getSubsIdFieldBuilder() {
-        if (subsIdBuilder_ == null) {
-          subsIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getSubsId(),
+      public monitoring.Monitoring.KpiList.Builder getKpiListBuilder(
+          int index) {
+        return getKpiListFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder(
+          int index) {
+        if (kpiListBuilder_ == null) {
+          return kpiList_.get(index);  } else {
+          return kpiListBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public java.util.List<? extends monitoring.Monitoring.KpiListOrBuilder> 
+           getKpiListOrBuilderList() {
+        if (kpiListBuilder_ != null) {
+          return kpiListBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(kpiList_);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public monitoring.Monitoring.KpiList.Builder addKpiListBuilder() {
+        return getKpiListFieldBuilder().addBuilder(
+            monitoring.Monitoring.KpiList.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public monitoring.Monitoring.KpiList.Builder addKpiListBuilder(
+          int index) {
+        return getKpiListFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.KpiList.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiList.Builder> 
+           getKpiListBuilderList() {
+        return getKpiListFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiList, monitoring.Monitoring.KpiList.Builder, monitoring.Monitoring.KpiListOrBuilder> 
+          getKpiListFieldBuilder() {
+        if (kpiListBuilder_ == null) {
+          kpiListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.KpiList, monitoring.Monitoring.KpiList.Builder, monitoring.Monitoring.KpiListOrBuilder>(
+                  kpiList_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          subsId_ = null;
+          kpiList_ = null;
         }
-        return subsIdBuilder_;
+        return kpiListBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -14336,110 +13134,95 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.SubscriptionID)
+      // @@protoc_insertion_point(builder_scope:monitoring.SubsResponse)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.SubscriptionID)
-    private static final monitoring.Monitoring.SubscriptionID DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.SubsResponse)
+    private static final monitoring.Monitoring.SubsResponse DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.SubscriptionID();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.SubsResponse();
     }
 
-    public static monitoring.Monitoring.SubscriptionID getDefaultInstance() {
+    public static monitoring.Monitoring.SubsResponse getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SubscriptionID>
-        PARSER = new com.google.protobuf.AbstractParser<SubscriptionID>() {
+    private static final com.google.protobuf.Parser<SubsResponse>
+        PARSER = new com.google.protobuf.AbstractParser<SubsResponse>() {
       @java.lang.Override
-      public SubscriptionID parsePartialFrom(
+      public SubsResponse parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SubscriptionID(input, extensionRegistry);
+        return new SubsResponse(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SubscriptionID> parser() {
+    public static com.google.protobuf.Parser<SubsResponse> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SubscriptionID> getParserForType() {
+    public com.google.protobuf.Parser<SubsResponse> getParserForType() {
       return PARSER;
     }
 
-    @java.lang.Override
-    public monitoring.Monitoring.SubscriptionID getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface SubsResponseOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.SubsResponse)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-     * @return Whether the subsId field is set.
-     */
-    boolean hasSubsId();
-    /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-     * @return The subsId.
-     */
-    monitoring.Monitoring.SubscriptionID getSubsId();
-    /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-     */
-    monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder();
-
+    @java.lang.Override
+    public monitoring.Monitoring.SubsResponse getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface SubsIDListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.SubsIDList)
+      com.google.protobuf.MessageOrBuilder {
+
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
      */
-    java.util.List<monitoring.Monitoring.KpiList> 
-        getKpiListList();
+    java.util.List<monitoring.Monitoring.SubscriptionID> 
+        getSubsListList();
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
      */
-    monitoring.Monitoring.KpiList getKpiList(int index);
+    monitoring.Monitoring.SubscriptionID getSubsList(int index);
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
      */
-    int getKpiListCount();
+    int getSubsListCount();
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
      */
-    java.util.List<? extends monitoring.Monitoring.KpiListOrBuilder> 
-        getKpiListOrBuilderList();
+    java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> 
+        getSubsListOrBuilderList();
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
      */
-    monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder(
+    monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder(
         int index);
   }
   /**
-   * Protobuf type {@code monitoring.SubsResponse}
+   * Protobuf type {@code monitoring.SubsIDList}
    */
-  public static final class SubsResponse extends
+  public static final class SubsIDList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.SubsResponse)
-      SubsResponseOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.SubsIDList)
+      SubsIDListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SubsResponse.newBuilder() to construct.
-    private SubsResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SubsIDList.newBuilder() to construct.
+    private SubsIDList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SubsResponse() {
-      kpiList_ = java.util.Collections.emptyList();
+    private SubsIDList() {
+      subsList_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SubsResponse();
+      return new SubsIDList();
     }
 
     @java.lang.Override
@@ -14447,7 +13230,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SubsResponse(
+    private SubsIDList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -14467,25 +13250,12 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              monitoring.Monitoring.SubscriptionID.Builder subBuilder = null;
-              if (subsId_ != null) {
-                subBuilder = subsId_.toBuilder();
-              }
-              subsId_ = input.readMessage(monitoring.Monitoring.SubscriptionID.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(subsId_);
-                subsId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                kpiList_ = new java.util.ArrayList<monitoring.Monitoring.KpiList>();
+                subsList_ = new java.util.ArrayList<monitoring.Monitoring.SubscriptionID>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              kpiList_.add(
-                  input.readMessage(monitoring.Monitoring.KpiList.parser(), extensionRegistry));
+              subsList_.add(
+                  input.readMessage(monitoring.Monitoring.SubscriptionID.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -14504,7 +13274,7 @@ public final class Monitoring {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
+          subsList_ = java.util.Collections.unmodifiableList(subsList_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -14512,81 +13282,55 @@ public final class Monitoring {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_SubsResponse_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_SubsIDList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_SubsResponse_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_SubsIDList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.SubsResponse.class, monitoring.Monitoring.SubsResponse.Builder.class);
-    }
-
-    public static final int SUBS_ID_FIELD_NUMBER = 1;
-    private monitoring.Monitoring.SubscriptionID subsId_;
-    /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-     * @return Whether the subsId field is set.
-     */
-    @java.lang.Override
-    public boolean hasSubsId() {
-      return subsId_ != null;
-    }
-    /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-     * @return The subsId.
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.SubscriptionID getSubsId() {
-      return subsId_ == null ? monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
-    }
-    /**
-     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder() {
-      return getSubsId();
+              monitoring.Monitoring.SubsIDList.class, monitoring.Monitoring.SubsIDList.Builder.class);
     }
 
-    public static final int KPI_LIST_FIELD_NUMBER = 2;
-    private java.util.List<monitoring.Monitoring.KpiList> kpiList_;
+    public static final int SUBS_LIST_FIELD_NUMBER = 1;
+    private java.util.List<monitoring.Monitoring.SubscriptionID> subsList_;
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<monitoring.Monitoring.KpiList> getKpiListList() {
-      return kpiList_;
+    public java.util.List<monitoring.Monitoring.SubscriptionID> getSubsListList() {
+      return subsList_;
     }
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends monitoring.Monitoring.KpiListOrBuilder> 
-        getKpiListOrBuilderList() {
-      return kpiList_;
+    public java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> 
+        getSubsListOrBuilderList() {
+      return subsList_;
     }
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
      */
     @java.lang.Override
-    public int getKpiListCount() {
-      return kpiList_.size();
+    public int getSubsListCount() {
+      return subsList_.size();
     }
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiList getKpiList(int index) {
-      return kpiList_.get(index);
+    public monitoring.Monitoring.SubscriptionID getSubsList(int index) {
+      return subsList_.get(index);
     }
     /**
-     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder(
+    public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder(
         int index) {
-      return kpiList_.get(index);
+      return subsList_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -14603,11 +13347,8 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (subsId_ != null) {
-        output.writeMessage(1, getSubsId());
-      }
-      for (int i = 0; i < kpiList_.size(); i++) {
-        output.writeMessage(2, kpiList_.get(i));
+      for (int i = 0; i < subsList_.size(); i++) {
+        output.writeMessage(1, subsList_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -14618,13 +13359,9 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (subsId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getSubsId());
-      }
-      for (int i = 0; i < kpiList_.size(); i++) {
+      for (int i = 0; i < subsList_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, kpiList_.get(i));
+          .computeMessageSize(1, subsList_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -14636,18 +13373,13 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.SubsResponse)) {
+      if (!(obj instanceof monitoring.Monitoring.SubsIDList)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.SubsResponse other = (monitoring.Monitoring.SubsResponse) obj;
+      monitoring.Monitoring.SubsIDList other = (monitoring.Monitoring.SubsIDList) obj;
 
-      if (hasSubsId() != other.hasSubsId()) return false;
-      if (hasSubsId()) {
-        if (!getSubsId()
-            .equals(other.getSubsId())) return false;
-      }
-      if (!getKpiListList()
-          .equals(other.getKpiListList())) return false;
+      if (!getSubsListList()
+          .equals(other.getSubsListList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -14659,82 +13391,78 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasSubsId()) {
-        hash = (37 * hash) + SUBS_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getSubsId().hashCode();
-      }
-      if (getKpiListCount() > 0) {
-        hash = (37 * hash) + KPI_LIST_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiListList().hashCode();
+      if (getSubsListCount() > 0) {
+        hash = (37 * hash) + SUBS_LIST_FIELD_NUMBER;
+        hash = (53 * hash) + getSubsListList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.SubsResponse parseFrom(
+    public static monitoring.Monitoring.SubsIDList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubsResponse parseFrom(
+    public static monitoring.Monitoring.SubsIDList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsResponse parseFrom(
+    public static monitoring.Monitoring.SubsIDList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubsResponse parseFrom(
+    public static monitoring.Monitoring.SubsIDList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsResponse parseFrom(byte[] data)
+    public static monitoring.Monitoring.SubsIDList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubsResponse parseFrom(
+    public static monitoring.Monitoring.SubsIDList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsResponse parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.SubsIDList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubsResponse parseFrom(
+    public static monitoring.Monitoring.SubsIDList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsResponse parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.SubsIDList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubsResponse parseDelimitedFrom(
+    public static monitoring.Monitoring.SubsIDList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsResponse parseFrom(
+    public static monitoring.Monitoring.SubsIDList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubsResponse parseFrom(
+    public static monitoring.Monitoring.SubsIDList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -14747,7 +13475,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.SubsResponse prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.SubsIDList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -14763,26 +13491,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.SubsResponse}
+     * Protobuf type {@code monitoring.SubsIDList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.SubsResponse)
-        monitoring.Monitoring.SubsResponseOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.SubsIDList)
+        monitoring.Monitoring.SubsIDListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_SubsResponse_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_SubsIDList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_SubsResponse_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_SubsIDList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.SubsResponse.class, monitoring.Monitoring.SubsResponse.Builder.class);
+                monitoring.Monitoring.SubsIDList.class, monitoring.Monitoring.SubsIDList.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.SubsResponse.newBuilder()
+      // Construct using monitoring.Monitoring.SubsIDList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -14795,23 +13523,17 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getKpiListFieldBuilder();
+          getSubsListFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (subsIdBuilder_ == null) {
-          subsId_ = null;
-        } else {
-          subsId_ = null;
-          subsIdBuilder_ = null;
-        }
-        if (kpiListBuilder_ == null) {
-          kpiList_ = java.util.Collections.emptyList();
+        if (subsListBuilder_ == null) {
+          subsList_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          kpiListBuilder_.clear();
+          subsListBuilder_.clear();
         }
         return this;
       }
@@ -14819,40 +13541,35 @@ public final class Monitoring {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_SubsResponse_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_SubsIDList_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.SubsResponse getDefaultInstanceForType() {
-        return monitoring.Monitoring.SubsResponse.getDefaultInstance();
+      public monitoring.Monitoring.SubsIDList getDefaultInstanceForType() {
+        return monitoring.Monitoring.SubsIDList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.SubsResponse build() {
-        monitoring.Monitoring.SubsResponse result = buildPartial();
+      public monitoring.Monitoring.SubsIDList build() {
+        monitoring.Monitoring.SubsIDList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
 
-      @java.lang.Override
-      public monitoring.Monitoring.SubsResponse buildPartial() {
-        monitoring.Monitoring.SubsResponse result = new monitoring.Monitoring.SubsResponse(this);
-        int from_bitField0_ = bitField0_;
-        if (subsIdBuilder_ == null) {
-          result.subsId_ = subsId_;
-        } else {
-          result.subsId_ = subsIdBuilder_.build();
-        }
-        if (kpiListBuilder_ == null) {
+      @java.lang.Override
+      public monitoring.Monitoring.SubsIDList buildPartial() {
+        monitoring.Monitoring.SubsIDList result = new monitoring.Monitoring.SubsIDList(this);
+        int from_bitField0_ = bitField0_;
+        if (subsListBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
+            subsList_ = java.util.Collections.unmodifiableList(subsList_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.kpiList_ = kpiList_;
+          result.subsList_ = subsList_;
         } else {
-          result.kpiList_ = kpiListBuilder_.build();
+          result.subsList_ = subsListBuilder_.build();
         }
         onBuilt();
         return result;
@@ -14892,42 +13609,39 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.SubsResponse) {
-          return mergeFrom((monitoring.Monitoring.SubsResponse)other);
+        if (other instanceof monitoring.Monitoring.SubsIDList) {
+          return mergeFrom((monitoring.Monitoring.SubsIDList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.SubsResponse other) {
-        if (other == monitoring.Monitoring.SubsResponse.getDefaultInstance()) return this;
-        if (other.hasSubsId()) {
-          mergeSubsId(other.getSubsId());
-        }
-        if (kpiListBuilder_ == null) {
-          if (!other.kpiList_.isEmpty()) {
-            if (kpiList_.isEmpty()) {
-              kpiList_ = other.kpiList_;
+      public Builder mergeFrom(monitoring.Monitoring.SubsIDList other) {
+        if (other == monitoring.Monitoring.SubsIDList.getDefaultInstance()) return this;
+        if (subsListBuilder_ == null) {
+          if (!other.subsList_.isEmpty()) {
+            if (subsList_.isEmpty()) {
+              subsList_ = other.subsList_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureKpiListIsMutable();
-              kpiList_.addAll(other.kpiList_);
+              ensureSubsListIsMutable();
+              subsList_.addAll(other.subsList_);
             }
             onChanged();
           }
         } else {
-          if (!other.kpiList_.isEmpty()) {
-            if (kpiListBuilder_.isEmpty()) {
-              kpiListBuilder_.dispose();
-              kpiListBuilder_ = null;
-              kpiList_ = other.kpiList_;
+          if (!other.subsList_.isEmpty()) {
+            if (subsListBuilder_.isEmpty()) {
+              subsListBuilder_.dispose();
+              subsListBuilder_ = null;
+              subsList_ = other.subsList_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              kpiListBuilder_ = 
+              subsListBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getKpiListFieldBuilder() : null;
+                   getSubsListFieldBuilder() : null;
             } else {
-              kpiListBuilder_.addAllMessages(other.kpiList_);
+              subsListBuilder_.addAllMessages(other.subsList_);
             }
           }
         }
@@ -14946,11 +13660,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.SubsResponse parsedMessage = null;
+        monitoring.Monitoring.SubsIDList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.SubsResponse) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.SubsIDList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -14961,363 +13675,244 @@ public final class Monitoring {
       }
       private int bitField0_;
 
-      private monitoring.Monitoring.SubscriptionID subsId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> subsIdBuilder_;
-      /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       * @return Whether the subsId field is set.
-       */
-      public boolean hasSubsId() {
-        return subsIdBuilder_ != null || subsId_ != null;
-      }
-      /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       * @return The subsId.
-       */
-      public monitoring.Monitoring.SubscriptionID getSubsId() {
-        if (subsIdBuilder_ == null) {
-          return subsId_ == null ? monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
-        } else {
-          return subsIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       */
-      public Builder setSubsId(monitoring.Monitoring.SubscriptionID value) {
-        if (subsIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          subsId_ = value;
-          onChanged();
-        } else {
-          subsIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       */
-      public Builder setSubsId(
-          monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
-        if (subsIdBuilder_ == null) {
-          subsId_ = builderForValue.build();
-          onChanged();
-        } else {
-          subsIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       */
-      public Builder mergeSubsId(monitoring.Monitoring.SubscriptionID value) {
-        if (subsIdBuilder_ == null) {
-          if (subsId_ != null) {
-            subsId_ =
-              monitoring.Monitoring.SubscriptionID.newBuilder(subsId_).mergeFrom(value).buildPartial();
-          } else {
-            subsId_ = value;
-          }
-          onChanged();
-        } else {
-          subsIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       */
-      public Builder clearSubsId() {
-        if (subsIdBuilder_ == null) {
-          subsId_ = null;
-          onChanged();
-        } else {
-          subsId_ = null;
-          subsIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       */
-      public monitoring.Monitoring.SubscriptionID.Builder getSubsIdBuilder() {
-        
-        onChanged();
-        return getSubsIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       */
-      public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder() {
-        if (subsIdBuilder_ != null) {
-          return subsIdBuilder_.getMessageOrBuilder();
-        } else {
-          return subsId_ == null ?
-              monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
-        }
-      }
-      /**
-       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> 
-          getSubsIdFieldBuilder() {
-        if (subsIdBuilder_ == null) {
-          subsIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder>(
-                  getSubsId(),
-                  getParentForChildren(),
-                  isClean());
-          subsId_ = null;
-        }
-        return subsIdBuilder_;
-      }
-
-      private java.util.List<monitoring.Monitoring.KpiList> kpiList_ =
+      private java.util.List<monitoring.Monitoring.SubscriptionID> subsList_ =
         java.util.Collections.emptyList();
-      private void ensureKpiListIsMutable() {
+      private void ensureSubsListIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          kpiList_ = new java.util.ArrayList<monitoring.Monitoring.KpiList>(kpiList_);
+          subsList_ = new java.util.ArrayList<monitoring.Monitoring.SubscriptionID>(subsList_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiList, monitoring.Monitoring.KpiList.Builder, monitoring.Monitoring.KpiListOrBuilder> kpiListBuilder_;
+          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> subsListBuilder_;
 
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public java.util.List<monitoring.Monitoring.KpiList> getKpiListList() {
-        if (kpiListBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(kpiList_);
+      public java.util.List<monitoring.Monitoring.SubscriptionID> getSubsListList() {
+        if (subsListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(subsList_);
         } else {
-          return kpiListBuilder_.getMessageList();
+          return subsListBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public int getKpiListCount() {
-        if (kpiListBuilder_ == null) {
-          return kpiList_.size();
+      public int getSubsListCount() {
+        if (subsListBuilder_ == null) {
+          return subsList_.size();
         } else {
-          return kpiListBuilder_.getCount();
+          return subsListBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public monitoring.Monitoring.KpiList getKpiList(int index) {
-        if (kpiListBuilder_ == null) {
-          return kpiList_.get(index);
+      public monitoring.Monitoring.SubscriptionID getSubsList(int index) {
+        if (subsListBuilder_ == null) {
+          return subsList_.get(index);
         } else {
-          return kpiListBuilder_.getMessage(index);
+          return subsListBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder setKpiList(
-          int index, monitoring.Monitoring.KpiList value) {
-        if (kpiListBuilder_ == null) {
+      public Builder setSubsList(
+          int index, monitoring.Monitoring.SubscriptionID value) {
+        if (subsListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureKpiListIsMutable();
-          kpiList_.set(index, value);
+          ensureSubsListIsMutable();
+          subsList_.set(index, value);
           onChanged();
         } else {
-          kpiListBuilder_.setMessage(index, value);
+          subsListBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder setKpiList(
-          int index, monitoring.Monitoring.KpiList.Builder builderForValue) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.set(index, builderForValue.build());
+      public Builder setSubsList(
+          int index, monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
+        if (subsListBuilder_ == null) {
+          ensureSubsListIsMutable();
+          subsList_.set(index, builderForValue.build());
           onChanged();
         } else {
-          kpiListBuilder_.setMessage(index, builderForValue.build());
+          subsListBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder addKpiList(monitoring.Monitoring.KpiList value) {
-        if (kpiListBuilder_ == null) {
+      public Builder addSubsList(monitoring.Monitoring.SubscriptionID value) {
+        if (subsListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureKpiListIsMutable();
-          kpiList_.add(value);
+          ensureSubsListIsMutable();
+          subsList_.add(value);
           onChanged();
         } else {
-          kpiListBuilder_.addMessage(value);
+          subsListBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
-       */
-      public Builder addKpiList(
-          int index, monitoring.Monitoring.KpiList value) {
-        if (kpiListBuilder_ == null) {
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       */
+      public Builder addSubsList(
+          int index, monitoring.Monitoring.SubscriptionID value) {
+        if (subsListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureKpiListIsMutable();
-          kpiList_.add(index, value);
+          ensureSubsListIsMutable();
+          subsList_.add(index, value);
           onChanged();
         } else {
-          kpiListBuilder_.addMessage(index, value);
+          subsListBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder addKpiList(
-          monitoring.Monitoring.KpiList.Builder builderForValue) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.add(builderForValue.build());
+      public Builder addSubsList(
+          monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
+        if (subsListBuilder_ == null) {
+          ensureSubsListIsMutable();
+          subsList_.add(builderForValue.build());
           onChanged();
         } else {
-          kpiListBuilder_.addMessage(builderForValue.build());
+          subsListBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder addKpiList(
-          int index, monitoring.Monitoring.KpiList.Builder builderForValue) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.add(index, builderForValue.build());
+      public Builder addSubsList(
+          int index, monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
+        if (subsListBuilder_ == null) {
+          ensureSubsListIsMutable();
+          subsList_.add(index, builderForValue.build());
           onChanged();
         } else {
-          kpiListBuilder_.addMessage(index, builderForValue.build());
+          subsListBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder addAllKpiList(
-          java.lang.Iterable<? extends monitoring.Monitoring.KpiList> values) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
+      public Builder addAllSubsList(
+          java.lang.Iterable<? extends monitoring.Monitoring.SubscriptionID> values) {
+        if (subsListBuilder_ == null) {
+          ensureSubsListIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, kpiList_);
+              values, subsList_);
           onChanged();
         } else {
-          kpiListBuilder_.addAllMessages(values);
+          subsListBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder clearKpiList() {
-        if (kpiListBuilder_ == null) {
-          kpiList_ = java.util.Collections.emptyList();
+      public Builder clearSubsList() {
+        if (subsListBuilder_ == null) {
+          subsList_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          kpiListBuilder_.clear();
+          subsListBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder removeKpiList(int index) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.remove(index);
+      public Builder removeSubsList(int index) {
+        if (subsListBuilder_ == null) {
+          ensureSubsListIsMutable();
+          subsList_.remove(index);
           onChanged();
         } else {
-          kpiListBuilder_.remove(index);
+          subsListBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public monitoring.Monitoring.KpiList.Builder getKpiListBuilder(
+      public monitoring.Monitoring.SubscriptionID.Builder getSubsListBuilder(
           int index) {
-        return getKpiListFieldBuilder().getBuilder(index);
+        return getSubsListFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder(
+      public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder(
           int index) {
-        if (kpiListBuilder_ == null) {
-          return kpiList_.get(index);  } else {
-          return kpiListBuilder_.getMessageOrBuilder(index);
+        if (subsListBuilder_ == null) {
+          return subsList_.get(index);  } else {
+          return subsListBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public java.util.List<? extends monitoring.Monitoring.KpiListOrBuilder> 
-           getKpiListOrBuilderList() {
-        if (kpiListBuilder_ != null) {
-          return kpiListBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> 
+           getSubsListOrBuilderList() {
+        if (subsListBuilder_ != null) {
+          return subsListBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(kpiList_);
+          return java.util.Collections.unmodifiableList(subsList_);
         }
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public monitoring.Monitoring.KpiList.Builder addKpiListBuilder() {
-        return getKpiListFieldBuilder().addBuilder(
-            monitoring.Monitoring.KpiList.getDefaultInstance());
+      public monitoring.Monitoring.SubscriptionID.Builder addSubsListBuilder() {
+        return getSubsListFieldBuilder().addBuilder(
+            monitoring.Monitoring.SubscriptionID.getDefaultInstance());
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public monitoring.Monitoring.KpiList.Builder addKpiListBuilder(
+      public monitoring.Monitoring.SubscriptionID.Builder addSubsListBuilder(
           int index) {
-        return getKpiListFieldBuilder().addBuilder(
-            index, monitoring.Monitoring.KpiList.getDefaultInstance());
+        return getSubsListFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.SubscriptionID.getDefaultInstance());
       }
       /**
-       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public java.util.List<monitoring.Monitoring.KpiList.Builder> 
-           getKpiListBuilderList() {
-        return getKpiListFieldBuilder().getBuilderList();
+      public java.util.List<monitoring.Monitoring.SubscriptionID.Builder> 
+           getSubsListBuilderList() {
+        return getSubsListFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.KpiList, monitoring.Monitoring.KpiList.Builder, monitoring.Monitoring.KpiListOrBuilder> 
-          getKpiListFieldBuilder() {
-        if (kpiListBuilder_ == null) {
-          kpiListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              monitoring.Monitoring.KpiList, monitoring.Monitoring.KpiList.Builder, monitoring.Monitoring.KpiListOrBuilder>(
-                  kpiList_,
+          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> 
+          getSubsListFieldBuilder() {
+        if (subsListBuilder_ == null) {
+          subsListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder>(
+                  subsList_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          kpiList_ = null;
+          subsList_ = null;
         }
-        return kpiListBuilder_;
+        return subsListBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -15332,95 +13927,176 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.SubsResponse)
+      // @@protoc_insertion_point(builder_scope:monitoring.SubsIDList)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.SubsResponse)
-    private static final monitoring.Monitoring.SubsResponse DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.SubsIDList)
+    private static final monitoring.Monitoring.SubsIDList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.SubsResponse();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.SubsIDList();
     }
 
-    public static monitoring.Monitoring.SubsResponse getDefaultInstance() {
+    public static monitoring.Monitoring.SubsIDList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SubsResponse>
-        PARSER = new com.google.protobuf.AbstractParser<SubsResponse>() {
+    private static final com.google.protobuf.Parser<SubsIDList>
+        PARSER = new com.google.protobuf.AbstractParser<SubsIDList>() {
       @java.lang.Override
-      public SubsResponse parsePartialFrom(
+      public SubsIDList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SubsResponse(input, extensionRegistry);
+        return new SubsIDList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SubsResponse> parser() {
+    public static com.google.protobuf.Parser<SubsIDList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SubsResponse> getParserForType() {
+    public com.google.protobuf.Parser<SubsIDList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.SubsResponse getDefaultInstanceForType() {
+    public monitoring.Monitoring.SubsIDList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SubsIDListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.SubsIDList)
+  public interface AlarmDescriptorOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.AlarmDescriptor)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     * <code>.monitoring.AlarmID alarm_id = 1;</code>
+     * @return Whether the alarmId field is set.
      */
-    java.util.List<monitoring.Monitoring.SubscriptionID> 
-        getSubsListList();
+    boolean hasAlarmId();
     /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     * <code>.monitoring.AlarmID alarm_id = 1;</code>
+     * @return The alarmId.
      */
-    monitoring.Monitoring.SubscriptionID getSubsList(int index);
+    monitoring.Monitoring.AlarmID getAlarmId();
     /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     * <code>.monitoring.AlarmID alarm_id = 1;</code>
      */
-    int getSubsListCount();
+    monitoring.Monitoring.AlarmIDOrBuilder getAlarmIdOrBuilder();
+
     /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     * <code>string alarm_description = 2;</code>
+     * @return The alarmDescription.
      */
-    java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> 
-        getSubsListOrBuilderList();
+    java.lang.String getAlarmDescription();
     /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     * <code>string alarm_description = 2;</code>
+     * @return The bytes for alarmDescription.
      */
-    monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder(
+    com.google.protobuf.ByteString
+        getAlarmDescriptionBytes();
+
+    /**
+     * <code>string name = 3;</code>
+     * @return The name.
+     */
+    java.lang.String getName();
+    /**
+     * <code>string name = 3;</code>
+     * @return The bytes for name.
+     */
+    com.google.protobuf.ByteString
+        getNameBytes();
+
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+     */
+    java.util.List<monitoring.Monitoring.KpiId> 
+        getKpiIdList();
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+     */
+    monitoring.Monitoring.KpiId getKpiId(int index);
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+     */
+    int getKpiIdCount();
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+     */
+    java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+        getKpiIdOrBuilderList();
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+     */
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
+        int index);
+
+    /**
+     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     */
+    java.util.List<monitoring.Monitoring.KpiValueRange> 
+        getKpiValueRangeList();
+    /**
+     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     */
+    monitoring.Monitoring.KpiValueRange getKpiValueRange(int index);
+    /**
+     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     */
+    int getKpiValueRangeCount();
+    /**
+     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     */
+    java.util.List<? extends monitoring.Monitoring.KpiValueRangeOrBuilder> 
+        getKpiValueRangeOrBuilderList();
+    /**
+     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     */
+    monitoring.Monitoring.KpiValueRangeOrBuilder getKpiValueRangeOrBuilder(
         int index);
+
+    /**
+     * <code>.context.Timestamp timestamp = 6;</code>
+     * @return Whether the timestamp field is set.
+     */
+    boolean hasTimestamp();
+    /**
+     * <code>.context.Timestamp timestamp = 6;</code>
+     * @return The timestamp.
+     */
+    context.ContextOuterClass.Timestamp getTimestamp();
+    /**
+     * <code>.context.Timestamp timestamp = 6;</code>
+     */
+    context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder();
   }
   /**
-   * Protobuf type {@code monitoring.SubsIDList}
+   * Protobuf type {@code monitoring.AlarmDescriptor}
    */
-  public static final class SubsIDList extends
+  public static final class AlarmDescriptor extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.SubsIDList)
-      SubsIDListOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.AlarmDescriptor)
+      AlarmDescriptorOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SubsIDList.newBuilder() to construct.
-    private SubsIDList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use AlarmDescriptor.newBuilder() to construct.
+    private AlarmDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SubsIDList() {
-      subsList_ = java.util.Collections.emptyList();
+    private AlarmDescriptor() {
+      alarmDescription_ = "";
+      name_ = "";
+      kpiId_ = java.util.Collections.emptyList();
+      kpiValueRange_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SubsIDList();
+      return new AlarmDescriptor();
     }
 
     @java.lang.Override
@@ -15428,7 +14104,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SubsIDList(
+    private AlarmDescriptor(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -15448,12 +14124,59 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
+              monitoring.Monitoring.AlarmID.Builder subBuilder = null;
+              if (alarmId_ != null) {
+                subBuilder = alarmId_.toBuilder();
+              }
+              alarmId_ = input.readMessage(monitoring.Monitoring.AlarmID.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(alarmId_);
+                alarmId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              alarmDescription_ = s;
+              break;
+            }
+            case 26: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              name_ = s;
+              break;
+            }
+            case 34: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                subsList_ = new java.util.ArrayList<monitoring.Monitoring.SubscriptionID>();
+                kpiId_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              subsList_.add(
-                  input.readMessage(monitoring.Monitoring.SubscriptionID.parser(), extensionRegistry));
+              kpiId_.add(
+                  input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry));
+              break;
+            }
+            case 42: {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                kpiValueRange_ = new java.util.ArrayList<monitoring.Monitoring.KpiValueRange>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              kpiValueRange_.add(
+                  input.readMessage(monitoring.Monitoring.KpiValueRange.parser(), extensionRegistry));
+              break;
+            }
+            case 50: {
+              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
+              if (timestamp_ != null) {
+                subBuilder = timestamp_.toBuilder();
+              }
+              timestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(timestamp_);
+                timestamp_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -15472,7 +14195,10 @@ public final class Monitoring {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          subsList_ = java.util.Collections.unmodifiableList(subsList_);
+          kpiId_ = java.util.Collections.unmodifiableList(kpiId_);
+        }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          kpiValueRange_ = java.util.Collections.unmodifiableList(kpiValueRange_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -15480,55 +14206,223 @@ public final class Monitoring {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_SubsIDList_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_SubsIDList_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.SubsIDList.class, monitoring.Monitoring.SubsIDList.Builder.class);
+              monitoring.Monitoring.AlarmDescriptor.class, monitoring.Monitoring.AlarmDescriptor.Builder.class);
     }
 
-    public static final int SUBS_LIST_FIELD_NUMBER = 1;
-    private java.util.List<monitoring.Monitoring.SubscriptionID> subsList_;
+    public static final int ALARM_ID_FIELD_NUMBER = 1;
+    private monitoring.Monitoring.AlarmID alarmId_;
     /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     * <code>.monitoring.AlarmID alarm_id = 1;</code>
+     * @return Whether the alarmId field is set.
      */
     @java.lang.Override
-    public java.util.List<monitoring.Monitoring.SubscriptionID> getSubsListList() {
-      return subsList_;
+    public boolean hasAlarmId() {
+      return alarmId_ != null;
     }
     /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     * <code>.monitoring.AlarmID alarm_id = 1;</code>
+     * @return The alarmId.
      */
     @java.lang.Override
-    public java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> 
-        getSubsListOrBuilderList() {
-      return subsList_;
+    public monitoring.Monitoring.AlarmID getAlarmId() {
+      return alarmId_ == null ? monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmId_;
     }
     /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     * <code>.monitoring.AlarmID alarm_id = 1;</code>
      */
     @java.lang.Override
-    public int getSubsListCount() {
-      return subsList_.size();
+    public monitoring.Monitoring.AlarmIDOrBuilder getAlarmIdOrBuilder() {
+      return getAlarmId();
     }
+
+    public static final int ALARM_DESCRIPTION_FIELD_NUMBER = 2;
+    private volatile java.lang.Object alarmDescription_;
     /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     * <code>string alarm_description = 2;</code>
+     * @return The alarmDescription.
      */
     @java.lang.Override
-    public monitoring.Monitoring.SubscriptionID getSubsList(int index) {
-      return subsList_.get(index);
+    public java.lang.String getAlarmDescription() {
+      java.lang.Object ref = alarmDescription_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        alarmDescription_ = s;
+        return s;
+      }
     }
     /**
-     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     * <code>string alarm_description = 2;</code>
+     * @return The bytes for alarmDescription.
      */
     @java.lang.Override
-    public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder(
+    public com.google.protobuf.ByteString
+        getAlarmDescriptionBytes() {
+      java.lang.Object ref = alarmDescription_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        alarmDescription_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int NAME_FIELD_NUMBER = 3;
+    private volatile java.lang.Object name_;
+    /**
+     * <code>string name = 3;</code>
+     * @return The name.
+     */
+    @java.lang.Override
+    public java.lang.String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        name_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string name = 3;</code>
+     * @return The bytes for name.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int KPI_ID_FIELD_NUMBER = 4;
+    private java.util.List<monitoring.Monitoring.KpiId> kpiId_;
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<monitoring.Monitoring.KpiId> getKpiIdList() {
+      return kpiId_;
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+        getKpiIdOrBuilderList() {
+      return kpiId_;
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+     */
+    @java.lang.Override
+    public int getKpiIdCount() {
+      return kpiId_.size();
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiId getKpiId(int index) {
+      return kpiId_.get(index);
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
         int index) {
-      return subsList_.get(index);
+      return kpiId_.get(index);
+    }
+
+    public static final int KPI_VALUE_RANGE_FIELD_NUMBER = 5;
+    private java.util.List<monitoring.Monitoring.KpiValueRange> kpiValueRange_;
+    /**
+     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     */
+    @java.lang.Override
+    public java.util.List<monitoring.Monitoring.KpiValueRange> getKpiValueRangeList() {
+      return kpiValueRange_;
+    }
+    /**
+     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends monitoring.Monitoring.KpiValueRangeOrBuilder> 
+        getKpiValueRangeOrBuilderList() {
+      return kpiValueRange_;
+    }
+    /**
+     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     */
+    @java.lang.Override
+    public int getKpiValueRangeCount() {
+      return kpiValueRange_.size();
+    }
+    /**
+     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValueRange getKpiValueRange(int index) {
+      return kpiValueRange_.get(index);
+    }
+    /**
+     * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValueRangeOrBuilder getKpiValueRangeOrBuilder(
+        int index) {
+      return kpiValueRange_.get(index);
+    }
+
+    public static final int TIMESTAMP_FIELD_NUMBER = 6;
+    private context.ContextOuterClass.Timestamp timestamp_;
+    /**
+     * <code>.context.Timestamp timestamp = 6;</code>
+     * @return Whether the timestamp field is set.
+     */
+    @java.lang.Override
+    public boolean hasTimestamp() {
+      return timestamp_ != null;
+    }
+    /**
+     * <code>.context.Timestamp timestamp = 6;</code>
+     * @return The timestamp.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Timestamp getTimestamp() {
+      return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+    }
+    /**
+     * <code>.context.Timestamp timestamp = 6;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
+      return getTimestamp();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -15545,21 +14439,54 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < subsList_.size(); i++) {
-        output.writeMessage(1, subsList_.get(i));
+      if (alarmId_ != null) {
+        output.writeMessage(1, getAlarmId());
+      }
+      if (!getAlarmDescriptionBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, alarmDescription_);
+      }
+      if (!getNameBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, name_);
+      }
+      for (int i = 0; i < kpiId_.size(); i++) {
+        output.writeMessage(4, kpiId_.get(i));
+      }
+      for (int i = 0; i < kpiValueRange_.size(); i++) {
+        output.writeMessage(5, kpiValueRange_.get(i));
+      }
+      if (timestamp_ != null) {
+        output.writeMessage(6, getTimestamp());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (alarmId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getAlarmId());
+      }
+      if (!getAlarmDescriptionBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, alarmDescription_);
+      }
+      if (!getNameBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, name_);
+      }
+      for (int i = 0; i < kpiId_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, kpiId_.get(i));
       }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      for (int i = 0; i < subsList_.size(); i++) {
+      for (int i = 0; i < kpiValueRange_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, subsList_.get(i));
+          .computeMessageSize(5, kpiValueRange_.get(i));
+      }
+      if (timestamp_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, getTimestamp());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -15571,13 +14498,29 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.SubsIDList)) {
+      if (!(obj instanceof monitoring.Monitoring.AlarmDescriptor)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.SubsIDList other = (monitoring.Monitoring.SubsIDList) obj;
+      monitoring.Monitoring.AlarmDescriptor other = (monitoring.Monitoring.AlarmDescriptor) obj;
 
-      if (!getSubsListList()
-          .equals(other.getSubsListList())) return false;
+      if (hasAlarmId() != other.hasAlarmId()) return false;
+      if (hasAlarmId()) {
+        if (!getAlarmId()
+            .equals(other.getAlarmId())) return false;
+      }
+      if (!getAlarmDescription()
+          .equals(other.getAlarmDescription())) return false;
+      if (!getName()
+          .equals(other.getName())) return false;
+      if (!getKpiIdList()
+          .equals(other.getKpiIdList())) return false;
+      if (!getKpiValueRangeList()
+          .equals(other.getKpiValueRangeList())) return false;
+      if (hasTimestamp() != other.hasTimestamp()) return false;
+      if (hasTimestamp()) {
+        if (!getTimestamp()
+            .equals(other.getTimestamp())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -15589,78 +14532,94 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getSubsListCount() > 0) {
-        hash = (37 * hash) + SUBS_LIST_FIELD_NUMBER;
-        hash = (53 * hash) + getSubsListList().hashCode();
+      if (hasAlarmId()) {
+        hash = (37 * hash) + ALARM_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getAlarmId().hashCode();
+      }
+      hash = (37 * hash) + ALARM_DESCRIPTION_FIELD_NUMBER;
+      hash = (53 * hash) + getAlarmDescription().hashCode();
+      hash = (37 * hash) + NAME_FIELD_NUMBER;
+      hash = (53 * hash) + getName().hashCode();
+      if (getKpiIdCount() > 0) {
+        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiIdList().hashCode();
+      }
+      if (getKpiValueRangeCount() > 0) {
+        hash = (37 * hash) + KPI_VALUE_RANGE_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiValueRangeList().hashCode();
+      }
+      if (hasTimestamp()) {
+        hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
+        hash = (53 * hash) + getTimestamp().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.SubsIDList parseFrom(
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubsIDList parseFrom(
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsIDList parseFrom(
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubsIDList parseFrom(
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsIDList parseFrom(byte[] data)
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.SubsIDList parseFrom(
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsIDList parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubsIDList parseFrom(
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsIDList parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.AlarmDescriptor parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubsIDList parseDelimitedFrom(
+    public static monitoring.Monitoring.AlarmDescriptor parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.SubsIDList parseFrom(
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.SubsIDList parseFrom(
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -15673,7 +14632,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.SubsIDList prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.AlarmDescriptor prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -15689,26 +14648,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.SubsIDList}
+     * Protobuf type {@code monitoring.AlarmDescriptor}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.SubsIDList)
-        monitoring.Monitoring.SubsIDListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.AlarmDescriptor)
+        monitoring.Monitoring.AlarmDescriptorOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_SubsIDList_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_SubsIDList_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.SubsIDList.class, monitoring.Monitoring.SubsIDList.Builder.class);
+                monitoring.Monitoring.AlarmDescriptor.class, monitoring.Monitoring.AlarmDescriptor.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.SubsIDList.newBuilder()
+      // Construct using monitoring.Monitoring.AlarmDescriptor.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -15721,1670 +14680,1731 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getSubsListFieldBuilder();
+          getKpiIdFieldBuilder();
+          getKpiValueRangeFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (subsListBuilder_ == null) {
-          subsList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          subsListBuilder_.clear();
-        }
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_SubsIDList_descriptor;
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.SubsIDList getDefaultInstanceForType() {
-        return monitoring.Monitoring.SubsIDList.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.SubsIDList build() {
-        monitoring.Monitoring.SubsIDList result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public monitoring.Monitoring.SubsIDList buildPartial() {
-        monitoring.Monitoring.SubsIDList result = new monitoring.Monitoring.SubsIDList(this);
-        int from_bitField0_ = bitField0_;
-        if (subsListBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            subsList_ = java.util.Collections.unmodifiableList(subsList_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.subsList_ = subsList_;
-        } else {
-          result.subsList_ = subsListBuilder_.build();
-        }
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.SubsIDList) {
-          return mergeFrom((monitoring.Monitoring.SubsIDList)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(monitoring.Monitoring.SubsIDList other) {
-        if (other == monitoring.Monitoring.SubsIDList.getDefaultInstance()) return this;
-        if (subsListBuilder_ == null) {
-          if (!other.subsList_.isEmpty()) {
-            if (subsList_.isEmpty()) {
-              subsList_ = other.subsList_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureSubsListIsMutable();
-              subsList_.addAll(other.subsList_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.subsList_.isEmpty()) {
-            if (subsListBuilder_.isEmpty()) {
-              subsListBuilder_.dispose();
-              subsListBuilder_ = null;
-              subsList_ = other.subsList_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              subsListBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSubsListFieldBuilder() : null;
-            } else {
-              subsListBuilder_.addAllMessages(other.subsList_);
-            }
-          }
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        monitoring.Monitoring.SubsIDList parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.SubsIDList) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private java.util.List<monitoring.Monitoring.SubscriptionID> subsList_ =
-        java.util.Collections.emptyList();
-      private void ensureSubsListIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          subsList_ = new java.util.ArrayList<monitoring.Monitoring.SubscriptionID>(subsList_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> subsListBuilder_;
-
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public java.util.List<monitoring.Monitoring.SubscriptionID> getSubsListList() {
-        if (subsListBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(subsList_);
+        if (alarmIdBuilder_ == null) {
+          alarmId_ = null;
         } else {
-          return subsListBuilder_.getMessageList();
+          alarmId_ = null;
+          alarmIdBuilder_ = null;
         }
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public int getSubsListCount() {
-        if (subsListBuilder_ == null) {
-          return subsList_.size();
+        alarmDescription_ = "";
+
+        name_ = "";
+
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          return subsListBuilder_.getCount();
+          kpiIdBuilder_.clear();
         }
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public monitoring.Monitoring.SubscriptionID getSubsList(int index) {
-        if (subsListBuilder_ == null) {
-          return subsList_.get(index);
+        if (kpiValueRangeBuilder_ == null) {
+          kpiValueRange_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
         } else {
-          return subsListBuilder_.getMessage(index);
+          kpiValueRangeBuilder_.clear();
         }
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public Builder setSubsList(
-          int index, monitoring.Monitoring.SubscriptionID value) {
-        if (subsListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSubsListIsMutable();
-          subsList_.set(index, value);
-          onChanged();
+        if (timestampBuilder_ == null) {
+          timestamp_ = null;
         } else {
-          subsListBuilder_.setMessage(index, value);
+          timestamp_ = null;
+          timestampBuilder_ = null;
         }
         return this;
       }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public Builder setSubsList(
-          int index, monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
-        if (subsListBuilder_ == null) {
-          ensureSubsListIsMutable();
-          subsList_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          subsListBuilder_.setMessage(index, builderForValue.build());
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_descriptor;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.AlarmDescriptor getDefaultInstanceForType() {
+        return monitoring.Monitoring.AlarmDescriptor.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.AlarmDescriptor build() {
+        monitoring.Monitoring.AlarmDescriptor result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
         }
-        return this;
+        return result;
       }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public Builder addSubsList(monitoring.Monitoring.SubscriptionID value) {
-        if (subsListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSubsListIsMutable();
-          subsList_.add(value);
-          onChanged();
+
+      @java.lang.Override
+      public monitoring.Monitoring.AlarmDescriptor buildPartial() {
+        monitoring.Monitoring.AlarmDescriptor result = new monitoring.Monitoring.AlarmDescriptor(this);
+        int from_bitField0_ = bitField0_;
+        if (alarmIdBuilder_ == null) {
+          result.alarmId_ = alarmId_;
         } else {
-          subsListBuilder_.addMessage(value);
+          result.alarmId_ = alarmIdBuilder_.build();
         }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public Builder addSubsList(
-          int index, monitoring.Monitoring.SubscriptionID value) {
-        if (subsListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+        result.alarmDescription_ = alarmDescription_;
+        result.name_ = name_;
+        if (kpiIdBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            kpiId_ = java.util.Collections.unmodifiableList(kpiId_);
+            bitField0_ = (bitField0_ & ~0x00000001);
           }
-          ensureSubsListIsMutable();
-          subsList_.add(index, value);
-          onChanged();
+          result.kpiId_ = kpiId_;
         } else {
-          subsListBuilder_.addMessage(index, value);
+          result.kpiId_ = kpiIdBuilder_.build();
         }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public Builder addSubsList(
-          monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
-        if (subsListBuilder_ == null) {
-          ensureSubsListIsMutable();
-          subsList_.add(builderForValue.build());
-          onChanged();
+        if (kpiValueRangeBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) != 0)) {
+            kpiValueRange_ = java.util.Collections.unmodifiableList(kpiValueRange_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.kpiValueRange_ = kpiValueRange_;
         } else {
-          subsListBuilder_.addMessage(builderForValue.build());
+          result.kpiValueRange_ = kpiValueRangeBuilder_.build();
         }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public Builder addSubsList(
-          int index, monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
-        if (subsListBuilder_ == null) {
-          ensureSubsListIsMutable();
-          subsList_.add(index, builderForValue.build());
-          onChanged();
+        if (timestampBuilder_ == null) {
+          result.timestamp_ = timestamp_;
         } else {
-          subsListBuilder_.addMessage(index, builderForValue.build());
+          result.timestamp_ = timestampBuilder_.build();
         }
-        return this;
+        onBuilt();
+        return result;
       }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public Builder addAllSubsList(
-          java.lang.Iterable<? extends monitoring.Monitoring.SubscriptionID> values) {
-        if (subsListBuilder_ == null) {
-          ensureSubsListIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, subsList_);
-          onChanged();
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.AlarmDescriptor) {
+          return mergeFrom((monitoring.Monitoring.AlarmDescriptor)other);
         } else {
-          subsListBuilder_.addAllMessages(values);
+          super.mergeFrom(other);
+          return this;
         }
-        return this;
       }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public Builder clearSubsList() {
-        if (subsListBuilder_ == null) {
-          subsList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+
+      public Builder mergeFrom(monitoring.Monitoring.AlarmDescriptor other) {
+        if (other == monitoring.Monitoring.AlarmDescriptor.getDefaultInstance()) return this;
+        if (other.hasAlarmId()) {
+          mergeAlarmId(other.getAlarmId());
+        }
+        if (!other.getAlarmDescription().isEmpty()) {
+          alarmDescription_ = other.alarmDescription_;
           onChanged();
-        } else {
-          subsListBuilder_.clear();
         }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public Builder removeSubsList(int index) {
-        if (subsListBuilder_ == null) {
-          ensureSubsListIsMutable();
-          subsList_.remove(index);
+        if (!other.getName().isEmpty()) {
+          name_ = other.name_;
           onChanged();
-        } else {
-          subsListBuilder_.remove(index);
         }
-        return this;
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public monitoring.Monitoring.SubscriptionID.Builder getSubsListBuilder(
-          int index) {
-        return getSubsListFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder(
-          int index) {
-        if (subsListBuilder_ == null) {
-          return subsList_.get(index);  } else {
-          return subsListBuilder_.getMessageOrBuilder(index);
+        if (kpiIdBuilder_ == null) {
+          if (!other.kpiId_.isEmpty()) {
+            if (kpiId_.isEmpty()) {
+              kpiId_ = other.kpiId_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureKpiIdIsMutable();
+              kpiId_.addAll(other.kpiId_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.kpiId_.isEmpty()) {
+            if (kpiIdBuilder_.isEmpty()) {
+              kpiIdBuilder_.dispose();
+              kpiIdBuilder_ = null;
+              kpiId_ = other.kpiId_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              kpiIdBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getKpiIdFieldBuilder() : null;
+            } else {
+              kpiIdBuilder_.addAllMessages(other.kpiId_);
+            }
+          }
         }
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> 
-           getSubsListOrBuilderList() {
-        if (subsListBuilder_ != null) {
-          return subsListBuilder_.getMessageOrBuilderList();
+        if (kpiValueRangeBuilder_ == null) {
+          if (!other.kpiValueRange_.isEmpty()) {
+            if (kpiValueRange_.isEmpty()) {
+              kpiValueRange_ = other.kpiValueRange_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureKpiValueRangeIsMutable();
+              kpiValueRange_.addAll(other.kpiValueRange_);
+            }
+            onChanged();
+          }
         } else {
-          return java.util.Collections.unmodifiableList(subsList_);
+          if (!other.kpiValueRange_.isEmpty()) {
+            if (kpiValueRangeBuilder_.isEmpty()) {
+              kpiValueRangeBuilder_.dispose();
+              kpiValueRangeBuilder_ = null;
+              kpiValueRange_ = other.kpiValueRange_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              kpiValueRangeBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getKpiValueRangeFieldBuilder() : null;
+            } else {
+              kpiValueRangeBuilder_.addAllMessages(other.kpiValueRange_);
+            }
+          }
         }
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public monitoring.Monitoring.SubscriptionID.Builder addSubsListBuilder() {
-        return getSubsListFieldBuilder().addBuilder(
-            monitoring.Monitoring.SubscriptionID.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public monitoring.Monitoring.SubscriptionID.Builder addSubsListBuilder(
-          int index) {
-        return getSubsListFieldBuilder().addBuilder(
-            index, monitoring.Monitoring.SubscriptionID.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
-       */
-      public java.util.List<monitoring.Monitoring.SubscriptionID.Builder> 
-           getSubsListBuilderList() {
-        return getSubsListFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> 
-          getSubsListFieldBuilder() {
-        if (subsListBuilder_ == null) {
-          subsListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder>(
-                  subsList_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          subsList_ = null;
+        if (other.hasTimestamp()) {
+          mergeTimestamp(other.getTimestamp());
         }
-        return subsListBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
       }
 
       @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
+      public final boolean isInitialized() {
+        return true;
       }
 
-
-      // @@protoc_insertion_point(builder_scope:monitoring.SubsIDList)
-    }
-
-    // @@protoc_insertion_point(class_scope:monitoring.SubsIDList)
-    private static final monitoring.Monitoring.SubsIDList DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.SubsIDList();
-    }
-
-    public static monitoring.Monitoring.SubsIDList getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<SubsIDList>
-        PARSER = new com.google.protobuf.AbstractParser<SubsIDList>() {
       @java.lang.Override
-      public SubsIDList parsePartialFrom(
+      public Builder mergeFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SubsIDList(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<SubsIDList> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<SubsIDList> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public monitoring.Monitoring.SubsIDList getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface AlarmDescriptorOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.AlarmDescriptor)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>string alarm_description = 1;</code>
-     * @return The alarmDescription.
-     */
-    java.lang.String getAlarmDescription();
-    /**
-     * <code>string alarm_description = 1;</code>
-     * @return The bytes for alarmDescription.
-     */
-    com.google.protobuf.ByteString
-        getAlarmDescriptionBytes();
-
-    /**
-     * <code>string name = 2;</code>
-     * @return The name.
-     */
-    java.lang.String getName();
-    /**
-     * <code>string name = 2;</code>
-     * @return The bytes for name.
-     */
-    com.google.protobuf.ByteString
-        getNameBytes();
-
-    /**
-     * <code>.monitoring.KpiId kpi_id = 3;</code>
-     * @return Whether the kpiId field is set.
-     */
-    boolean hasKpiId();
-    /**
-     * <code>.monitoring.KpiId kpi_id = 3;</code>
-     * @return The kpiId.
-     */
-    monitoring.Monitoring.KpiId getKpiId();
-    /**
-     * <code>.monitoring.KpiId kpi_id = 3;</code>
-     */
-    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
-
-    /**
-     * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
-     * @return Whether the kpiValueRange field is set.
-     */
-    boolean hasKpiValueRange();
-    /**
-     * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
-     * @return The kpiValueRange.
-     */
-    monitoring.Monitoring.KpiValueRange getKpiValueRange();
-    /**
-     * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
-     */
-    monitoring.Monitoring.KpiValueRangeOrBuilder getKpiValueRangeOrBuilder();
-
-    /**
-     * <code>string timestamp = 5;</code>
-     * @return The timestamp.
-     */
-    java.lang.String getTimestamp();
-    /**
-     * <code>string timestamp = 5;</code>
-     * @return The bytes for timestamp.
-     */
-    com.google.protobuf.ByteString
-        getTimestampBytes();
-  }
-  /**
-   * Protobuf type {@code monitoring.AlarmDescriptor}
-   */
-  public static final class AlarmDescriptor extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.AlarmDescriptor)
-      AlarmDescriptorOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use AlarmDescriptor.newBuilder() to construct.
-    private AlarmDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private AlarmDescriptor() {
-      alarmDescription_ = "";
-      name_ = "";
-      timestamp_ = "";
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new AlarmDescriptor();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private AlarmDescriptor(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
+          throws java.io.IOException {
+        monitoring.Monitoring.AlarmDescriptor parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.AlarmDescriptor) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
       }
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            case 10: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              alarmDescription_ = s;
-              break;
-            }
-            case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              name_ = s;
-              break;
-            }
-            case 26: {
-              monitoring.Monitoring.KpiId.Builder subBuilder = null;
-              if (kpiId_ != null) {
-                subBuilder = kpiId_.toBuilder();
-              }
-              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(kpiId_);
-                kpiId_ = subBuilder.buildPartial();
-              }
+      private int bitField0_;
 
-              break;
-            }
-            case 34: {
-              monitoring.Monitoring.KpiValueRange.Builder subBuilder = null;
-              if (kpiValueRange_ != null) {
-                subBuilder = kpiValueRange_.toBuilder();
-              }
-              kpiValueRange_ = input.readMessage(monitoring.Monitoring.KpiValueRange.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(kpiValueRange_);
-                kpiValueRange_ = subBuilder.buildPartial();
-              }
+      private monitoring.Monitoring.AlarmID alarmId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder> alarmIdBuilder_;
+      /**
+       * <code>.monitoring.AlarmID alarm_id = 1;</code>
+       * @return Whether the alarmId field is set.
+       */
+      public boolean hasAlarmId() {
+        return alarmIdBuilder_ != null || alarmId_ != null;
+      }
+      /**
+       * <code>.monitoring.AlarmID alarm_id = 1;</code>
+       * @return The alarmId.
+       */
+      public monitoring.Monitoring.AlarmID getAlarmId() {
+        if (alarmIdBuilder_ == null) {
+          return alarmId_ == null ? monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmId_;
+        } else {
+          return alarmIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.monitoring.AlarmID alarm_id = 1;</code>
+       */
+      public Builder setAlarmId(monitoring.Monitoring.AlarmID value) {
+        if (alarmIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          alarmId_ = value;
+          onChanged();
+        } else {
+          alarmIdBuilder_.setMessage(value);
+        }
 
-              break;
-            }
-            case 42: {
-              java.lang.String s = input.readStringRequireUtf8();
+        return this;
+      }
+      /**
+       * <code>.monitoring.AlarmID alarm_id = 1;</code>
+       */
+      public Builder setAlarmId(
+          monitoring.Monitoring.AlarmID.Builder builderForValue) {
+        if (alarmIdBuilder_ == null) {
+          alarmId_ = builderForValue.build();
+          onChanged();
+        } else {
+          alarmIdBuilder_.setMessage(builderForValue.build());
+        }
 
-              timestamp_ = s;
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
+        return this;
+      }
+      /**
+       * <code>.monitoring.AlarmID alarm_id = 1;</code>
+       */
+      public Builder mergeAlarmId(monitoring.Monitoring.AlarmID value) {
+        if (alarmIdBuilder_ == null) {
+          if (alarmId_ != null) {
+            alarmId_ =
+              monitoring.Monitoring.AlarmID.newBuilder(alarmId_).mergeFrom(value).buildPartial();
+          } else {
+            alarmId_ = value;
           }
+          onChanged();
+        } else {
+          alarmIdBuilder_.mergeFrom(value);
         }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
+
+        return this;
       }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_descriptor;
-    }
+      /**
+       * <code>.monitoring.AlarmID alarm_id = 1;</code>
+       */
+      public Builder clearAlarmId() {
+        if (alarmIdBuilder_ == null) {
+          alarmId_ = null;
+          onChanged();
+        } else {
+          alarmId_ = null;
+          alarmIdBuilder_ = null;
+        }
 
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.AlarmDescriptor.class, monitoring.Monitoring.AlarmDescriptor.Builder.class);
-    }
+        return this;
+      }
+      /**
+       * <code>.monitoring.AlarmID alarm_id = 1;</code>
+       */
+      public monitoring.Monitoring.AlarmID.Builder getAlarmIdBuilder() {
+        
+        onChanged();
+        return getAlarmIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.AlarmID alarm_id = 1;</code>
+       */
+      public monitoring.Monitoring.AlarmIDOrBuilder getAlarmIdOrBuilder() {
+        if (alarmIdBuilder_ != null) {
+          return alarmIdBuilder_.getMessageOrBuilder();
+        } else {
+          return alarmId_ == null ?
+              monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmId_;
+        }
+      }
+      /**
+       * <code>.monitoring.AlarmID alarm_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder> 
+          getAlarmIdFieldBuilder() {
+        if (alarmIdBuilder_ == null) {
+          alarmIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder>(
+                  getAlarmId(),
+                  getParentForChildren(),
+                  isClean());
+          alarmId_ = null;
+        }
+        return alarmIdBuilder_;
+      }
 
-    public static final int ALARM_DESCRIPTION_FIELD_NUMBER = 1;
-    private volatile java.lang.Object alarmDescription_;
-    /**
-     * <code>string alarm_description = 1;</code>
-     * @return The alarmDescription.
-     */
-    @java.lang.Override
-    public java.lang.String getAlarmDescription() {
-      java.lang.Object ref = alarmDescription_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        alarmDescription_ = s;
-        return s;
+      private java.lang.Object alarmDescription_ = "";
+      /**
+       * <code>string alarm_description = 2;</code>
+       * @return The alarmDescription.
+       */
+      public java.lang.String getAlarmDescription() {
+        java.lang.Object ref = alarmDescription_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          alarmDescription_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
       }
-    }
-    /**
-     * <code>string alarm_description = 1;</code>
-     * @return The bytes for alarmDescription.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString
-        getAlarmDescriptionBytes() {
-      java.lang.Object ref = alarmDescription_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        alarmDescription_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
+      /**
+       * <code>string alarm_description = 2;</code>
+       * @return The bytes for alarmDescription.
+       */
+      public com.google.protobuf.ByteString
+          getAlarmDescriptionBytes() {
+        java.lang.Object ref = alarmDescription_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          alarmDescription_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string alarm_description = 2;</code>
+       * @param value The alarmDescription to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAlarmDescription(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        alarmDescription_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string alarm_description = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAlarmDescription() {
+        
+        alarmDescription_ = getDefaultInstance().getAlarmDescription();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string alarm_description = 2;</code>
+       * @param value The bytes for alarmDescription to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAlarmDescriptionBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        alarmDescription_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object name_ = "";
+      /**
+       * <code>string name = 3;</code>
+       * @return The name.
+       */
+      public java.lang.String getName() {
+        java.lang.Object ref = name_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          name_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
       }
-    }
-
-    public static final int NAME_FIELD_NUMBER = 2;
-    private volatile java.lang.Object name_;
-    /**
-     * <code>string name = 2;</code>
-     * @return The name.
-     */
-    @java.lang.Override
-    public java.lang.String getName() {
-      java.lang.Object ref = name_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        name_ = s;
-        return s;
+      /**
+       * <code>string name = 3;</code>
+       * @return The bytes for name.
+       */
+      public com.google.protobuf.ByteString
+          getNameBytes() {
+        java.lang.Object ref = name_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          name_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
       }
-    }
-    /**
-     * <code>string name = 2;</code>
-     * @return The bytes for name.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString
-        getNameBytes() {
-      java.lang.Object ref = name_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        name_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
+      /**
+       * <code>string name = 3;</code>
+       * @param value The name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        name_ = value;
+        onChanged();
+        return this;
       }
-    }
-
-    public static final int KPI_ID_FIELD_NUMBER = 3;
-    private monitoring.Monitoring.KpiId kpiId_;
-    /**
-     * <code>.monitoring.KpiId kpi_id = 3;</code>
-     * @return Whether the kpiId field is set.
-     */
-    @java.lang.Override
-    public boolean hasKpiId() {
-      return kpiId_ != null;
-    }
-    /**
-     * <code>.monitoring.KpiId kpi_id = 3;</code>
-     * @return The kpiId.
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiId getKpiId() {
-      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
-    }
-    /**
-     * <code>.monitoring.KpiId kpi_id = 3;</code>
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-      return getKpiId();
-    }
-
-    public static final int KPI_VALUE_RANGE_FIELD_NUMBER = 4;
-    private monitoring.Monitoring.KpiValueRange kpiValueRange_;
-    /**
-     * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
-     * @return Whether the kpiValueRange field is set.
-     */
-    @java.lang.Override
-    public boolean hasKpiValueRange() {
-      return kpiValueRange_ != null;
-    }
-    /**
-     * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
-     * @return The kpiValueRange.
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiValueRange getKpiValueRange() {
-      return kpiValueRange_ == null ? monitoring.Monitoring.KpiValueRange.getDefaultInstance() : kpiValueRange_;
-    }
-    /**
-     * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiValueRangeOrBuilder getKpiValueRangeOrBuilder() {
-      return getKpiValueRange();
-    }
-
-    public static final int TIMESTAMP_FIELD_NUMBER = 5;
-    private volatile java.lang.Object timestamp_;
-    /**
-     * <code>string timestamp = 5;</code>
-     * @return The timestamp.
-     */
-    @java.lang.Override
-    public java.lang.String getTimestamp() {
-      java.lang.Object ref = timestamp_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        timestamp_ = s;
-        return s;
+      /**
+       * <code>string name = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearName() {
+        
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
       }
-    }
-    /**
-     * <code>string timestamp = 5;</code>
-     * @return The bytes for timestamp.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString
-        getTimestampBytes() {
-      java.lang.Object ref = timestamp_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        timestamp_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
+      /**
+       * <code>string name = 3;</code>
+       * @param value The bytes for name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        name_ = value;
+        onChanged();
+        return this;
       }
-    }
 
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
+      private java.util.List<monitoring.Monitoring.KpiId> kpiId_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiIdIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiId_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>(kpiId_);
+          bitField0_ |= 0x00000001;
+         }
+      }
 
-      memoizedIsInitialized = 1;
-      return true;
-    }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
 
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (!getAlarmDescriptionBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, alarmDescription_);
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiId> getKpiIdList() {
+        if (kpiIdBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(kpiId_);
+        } else {
+          return kpiIdBuilder_.getMessageList();
+        }
       }
-      if (!getNameBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+       */
+      public int getKpiIdCount() {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_.size();
+        } else {
+          return kpiIdBuilder_.getCount();
+        }
       }
-      if (kpiId_ != null) {
-        output.writeMessage(3, getKpiId());
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+       */
+      public monitoring.Monitoring.KpiId getKpiId(int index) {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_.get(index);
+        } else {
+          return kpiIdBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+       */
+      public Builder setKpiId(
+          int index, monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdIsMutable();
+          kpiId_.set(index, value);
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(index, value);
+        }
+        return this;
       }
-      if (kpiValueRange_ != null) {
-        output.writeMessage(4, getKpiValueRange());
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+       */
+      public Builder setKpiId(
+          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          ensureKpiIdIsMutable();
+          kpiId_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
       }
-      if (!getTimestampBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, timestamp_);
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+       */
+      public Builder addKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdIsMutable();
+          kpiId_.add(value);
+          onChanged();
+        } else {
+          kpiIdBuilder_.addMessage(value);
+        }
+        return this;
       }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (!getAlarmDescriptionBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, alarmDescription_);
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+       */
+      public Builder addKpiId(
+          int index, monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdIsMutable();
+          kpiId_.add(index, value);
+          onChanged();
+        } else {
+          kpiIdBuilder_.addMessage(index, value);
+        }
+        return this;
       }
-      if (!getNameBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+       */
+      public Builder addKpiId(
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          ensureKpiIdIsMutable();
+          kpiId_.add(builderForValue.build());
+          onChanged();
+        } else {
+          kpiIdBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
       }
-      if (kpiId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, getKpiId());
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+       */
+      public Builder addKpiId(
+          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          ensureKpiIdIsMutable();
+          kpiId_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiIdBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
       }
-      if (kpiValueRange_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, getKpiValueRange());
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+       */
+      public Builder addAllKpiId(
+          java.lang.Iterable<? extends monitoring.Monitoring.KpiId> values) {
+        if (kpiIdBuilder_ == null) {
+          ensureKpiIdIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, kpiId_);
+          onChanged();
+        } else {
+          kpiIdBuilder_.addAllMessages(values);
+        }
+        return this;
       }
-      if (!getTimestampBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, timestamp_);
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+       */
+      public Builder clearKpiId() {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          kpiIdBuilder_.clear();
+        }
+        return this;
       }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+       */
+      public Builder removeKpiId(int index) {
+        if (kpiIdBuilder_ == null) {
+          ensureKpiIdIsMutable();
+          kpiId_.remove(index);
+          onChanged();
+        } else {
+          kpiIdBuilder_.remove(index);
+        }
+        return this;
       }
-      if (!(obj instanceof monitoring.Monitoring.AlarmDescriptor)) {
-        return super.equals(obj);
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder(
+          int index) {
+        return getKpiIdFieldBuilder().getBuilder(index);
       }
-      monitoring.Monitoring.AlarmDescriptor other = (monitoring.Monitoring.AlarmDescriptor) obj;
-
-      if (!getAlarmDescription()
-          .equals(other.getAlarmDescription())) return false;
-      if (!getName()
-          .equals(other.getName())) return false;
-      if (hasKpiId() != other.hasKpiId()) return false;
-      if (hasKpiId()) {
-        if (!getKpiId()
-            .equals(other.getKpiId())) return false;
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+       */
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
+          int index) {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_.get(index);  } else {
+          return kpiIdBuilder_.getMessageOrBuilder(index);
+        }
       }
-      if (hasKpiValueRange() != other.hasKpiValueRange()) return false;
-      if (hasKpiValueRange()) {
-        if (!getKpiValueRange()
-            .equals(other.getKpiValueRange())) return false;
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+       */
+      public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+           getKpiIdOrBuilderList() {
+        if (kpiIdBuilder_ != null) {
+          return kpiIdBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(kpiId_);
+        }
       }
-      if (!getTimestamp()
-          .equals(other.getTimestamp())) return false;
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder addKpiIdBuilder() {
+        return getKpiIdFieldBuilder().addBuilder(
+            monitoring.Monitoring.KpiId.getDefaultInstance());
       }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + ALARM_DESCRIPTION_FIELD_NUMBER;
-      hash = (53 * hash) + getAlarmDescription().hashCode();
-      hash = (37 * hash) + NAME_FIELD_NUMBER;
-      hash = (53 * hash) + getName().hashCode();
-      if (hasKpiId()) {
-        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiId().hashCode();
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder addKpiIdBuilder(
+          int index) {
+        return getKpiIdFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.KpiId.getDefaultInstance());
       }
-      if (hasKpiValueRange()) {
-        hash = (37 * hash) + KPI_VALUE_RANGE_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiValueRange().hashCode();
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 4;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiId.Builder> 
+           getKpiIdBuilderList() {
+        return getKpiIdFieldBuilder().getBuilderList();
       }
-      hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
-      hash = (53 * hash) + getTimestamp().hashCode();
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static monitoring.Monitoring.AlarmDescriptor parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static monitoring.Monitoring.AlarmDescriptor parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(monitoring.Monitoring.AlarmDescriptor prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code monitoring.AlarmDescriptor}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.AlarmDescriptor)
-        monitoring.Monitoring.AlarmDescriptorOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_descriptor;
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
+          getKpiIdFieldBuilder() {
+        if (kpiIdBuilder_ == null) {
+          kpiIdBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
+                  kpiId_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          kpiId_ = null;
+        }
+        return kpiIdBuilder_;
       }
 
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.AlarmDescriptor.class, monitoring.Monitoring.AlarmDescriptor.Builder.class);
+      private java.util.List<monitoring.Monitoring.KpiValueRange> kpiValueRange_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiValueRangeIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          kpiValueRange_ = new java.util.ArrayList<monitoring.Monitoring.KpiValueRange>(kpiValueRange_);
+          bitField0_ |= 0x00000002;
+         }
       }
 
-      // Construct using monitoring.Monitoring.AlarmDescriptor.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiValueRange, monitoring.Monitoring.KpiValueRange.Builder, monitoring.Monitoring.KpiValueRangeOrBuilder> kpiValueRangeBuilder_;
 
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
+      /**
+       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiValueRange> getKpiValueRangeList() {
+        if (kpiValueRangeBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(kpiValueRange_);
+        } else {
+          return kpiValueRangeBuilder_.getMessageList();
+        }
       }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
+      /**
+       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       */
+      public int getKpiValueRangeCount() {
+        if (kpiValueRangeBuilder_ == null) {
+          return kpiValueRange_.size();
+        } else {
+          return kpiValueRangeBuilder_.getCount();
         }
       }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        alarmDescription_ = "";
-
-        name_ = "";
-
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
+      /**
+       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       */
+      public monitoring.Monitoring.KpiValueRange getKpiValueRange(int index) {
+        if (kpiValueRangeBuilder_ == null) {
+          return kpiValueRange_.get(index);
         } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
+          return kpiValueRangeBuilder_.getMessage(index);
         }
+      }
+      /**
+       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       */
+      public Builder setKpiValueRange(
+          int index, monitoring.Monitoring.KpiValueRange value) {
         if (kpiValueRangeBuilder_ == null) {
-          kpiValueRange_ = null;
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiValueRangeIsMutable();
+          kpiValueRange_.set(index, value);
+          onChanged();
         } else {
-          kpiValueRange_ = null;
-          kpiValueRangeBuilder_ = null;
+          kpiValueRangeBuilder_.setMessage(index, value);
         }
-        timestamp_ = "";
-
         return this;
       }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_descriptor;
+      /**
+       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       */
+      public Builder setKpiValueRange(
+          int index, monitoring.Monitoring.KpiValueRange.Builder builderForValue) {
+        if (kpiValueRangeBuilder_ == null) {
+          ensureKpiValueRangeIsMutable();
+          kpiValueRange_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiValueRangeBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
       }
-
-      @java.lang.Override
-      public monitoring.Monitoring.AlarmDescriptor getDefaultInstanceForType() {
-        return monitoring.Monitoring.AlarmDescriptor.getDefaultInstance();
+      /**
+       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       */
+      public Builder addKpiValueRange(monitoring.Monitoring.KpiValueRange value) {
+        if (kpiValueRangeBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiValueRangeIsMutable();
+          kpiValueRange_.add(value);
+          onChanged();
+        } else {
+          kpiValueRangeBuilder_.addMessage(value);
+        }
+        return this;
       }
-
-      @java.lang.Override
-      public monitoring.Monitoring.AlarmDescriptor build() {
-        monitoring.Monitoring.AlarmDescriptor result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
+      /**
+       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       */
+      public Builder addKpiValueRange(
+          int index, monitoring.Monitoring.KpiValueRange value) {
+        if (kpiValueRangeBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiValueRangeIsMutable();
+          kpiValueRange_.add(index, value);
+          onChanged();
+        } else {
+          kpiValueRangeBuilder_.addMessage(index, value);
         }
-        return result;
+        return this;
       }
-
-      @java.lang.Override
-      public monitoring.Monitoring.AlarmDescriptor buildPartial() {
-        monitoring.Monitoring.AlarmDescriptor result = new monitoring.Monitoring.AlarmDescriptor(this);
-        result.alarmDescription_ = alarmDescription_;
-        result.name_ = name_;
-        if (kpiIdBuilder_ == null) {
-          result.kpiId_ = kpiId_;
+      /**
+       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       */
+      public Builder addKpiValueRange(
+          monitoring.Monitoring.KpiValueRange.Builder builderForValue) {
+        if (kpiValueRangeBuilder_ == null) {
+          ensureKpiValueRangeIsMutable();
+          kpiValueRange_.add(builderForValue.build());
+          onChanged();
         } else {
-          result.kpiId_ = kpiIdBuilder_.build();
+          kpiValueRangeBuilder_.addMessage(builderForValue.build());
         }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       */
+      public Builder addKpiValueRange(
+          int index, monitoring.Monitoring.KpiValueRange.Builder builderForValue) {
         if (kpiValueRangeBuilder_ == null) {
-          result.kpiValueRange_ = kpiValueRange_;
+          ensureKpiValueRangeIsMutable();
+          kpiValueRange_.add(index, builderForValue.build());
+          onChanged();
         } else {
-          result.kpiValueRange_ = kpiValueRangeBuilder_.build();
+          kpiValueRangeBuilder_.addMessage(index, builderForValue.build());
         }
-        result.timestamp_ = timestamp_;
-        onBuilt();
-        return result;
+        return this;
       }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
+      /**
+       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       */
+      public Builder addAllKpiValueRange(
+          java.lang.Iterable<? extends monitoring.Monitoring.KpiValueRange> values) {
+        if (kpiValueRangeBuilder_ == null) {
+          ensureKpiValueRangeIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, kpiValueRange_);
+          onChanged();
+        } else {
+          kpiValueRangeBuilder_.addAllMessages(values);
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
+      /**
+       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       */
+      public Builder clearKpiValueRange() {
+        if (kpiValueRangeBuilder_ == null) {
+          kpiValueRange_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          kpiValueRangeBuilder_.clear();
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
+      /**
+       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       */
+      public Builder removeKpiValueRange(int index) {
+        if (kpiValueRangeBuilder_ == null) {
+          ensureKpiValueRangeIsMutable();
+          kpiValueRange_.remove(index);
+          onChanged();
+        } else {
+          kpiValueRangeBuilder_.remove(index);
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
+      /**
+       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       */
+      public monitoring.Monitoring.KpiValueRange.Builder getKpiValueRangeBuilder(
+          int index) {
+        return getKpiValueRangeFieldBuilder().getBuilder(index);
       }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
+      /**
+       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       */
+      public monitoring.Monitoring.KpiValueRangeOrBuilder getKpiValueRangeOrBuilder(
+          int index) {
+        if (kpiValueRangeBuilder_ == null) {
+          return kpiValueRange_.get(index);  } else {
+          return kpiValueRangeBuilder_.getMessageOrBuilder(index);
+        }
       }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
+      /**
+       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       */
+      public java.util.List<? extends monitoring.Monitoring.KpiValueRangeOrBuilder> 
+           getKpiValueRangeOrBuilderList() {
+        if (kpiValueRangeBuilder_ != null) {
+          return kpiValueRangeBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(kpiValueRange_);
+        }
       }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.AlarmDescriptor) {
-          return mergeFrom((monitoring.Monitoring.AlarmDescriptor)other);
+      /**
+       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       */
+      public monitoring.Monitoring.KpiValueRange.Builder addKpiValueRangeBuilder() {
+        return getKpiValueRangeFieldBuilder().addBuilder(
+            monitoring.Monitoring.KpiValueRange.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       */
+      public monitoring.Monitoring.KpiValueRange.Builder addKpiValueRangeBuilder(
+          int index) {
+        return getKpiValueRangeFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.KpiValueRange.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiValueRange kpi_value_range = 5;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiValueRange.Builder> 
+           getKpiValueRangeBuilderList() {
+        return getKpiValueRangeFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiValueRange, monitoring.Monitoring.KpiValueRange.Builder, monitoring.Monitoring.KpiValueRangeOrBuilder> 
+          getKpiValueRangeFieldBuilder() {
+        if (kpiValueRangeBuilder_ == null) {
+          kpiValueRangeBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.KpiValueRange, monitoring.Monitoring.KpiValueRange.Builder, monitoring.Monitoring.KpiValueRangeOrBuilder>(
+                  kpiValueRange_,
+                  ((bitField0_ & 0x00000002) != 0),
+                  getParentForChildren(),
+                  isClean());
+          kpiValueRange_ = null;
+        }
+        return kpiValueRangeBuilder_;
+      }
+
+      private context.ContextOuterClass.Timestamp timestamp_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> timestampBuilder_;
+      /**
+       * <code>.context.Timestamp timestamp = 6;</code>
+       * @return Whether the timestamp field is set.
+       */
+      public boolean hasTimestamp() {
+        return timestampBuilder_ != null || timestamp_ != null;
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 6;</code>
+       * @return The timestamp.
+       */
+      public context.ContextOuterClass.Timestamp getTimestamp() {
+        if (timestampBuilder_ == null) {
+          return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+        } else {
+          return timestampBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 6;</code>
+       */
+      public Builder setTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (timestampBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          timestamp_ = value;
+          onChanged();
+        } else {
+          timestampBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 6;</code>
+       */
+      public Builder setTimestamp(
+          context.ContextOuterClass.Timestamp.Builder builderForValue) {
+        if (timestampBuilder_ == null) {
+          timestamp_ = builderForValue.build();
+          onChanged();
+        } else {
+          timestampBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 6;</code>
+       */
+      public Builder mergeTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (timestampBuilder_ == null) {
+          if (timestamp_ != null) {
+            timestamp_ =
+              context.ContextOuterClass.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
+          } else {
+            timestamp_ = value;
+          }
+          onChanged();
         } else {
-          super.mergeFrom(other);
-          return this;
+          timestampBuilder_.mergeFrom(value);
         }
-      }
 
-      public Builder mergeFrom(monitoring.Monitoring.AlarmDescriptor other) {
-        if (other == monitoring.Monitoring.AlarmDescriptor.getDefaultInstance()) return this;
-        if (!other.getAlarmDescription().isEmpty()) {
-          alarmDescription_ = other.alarmDescription_;
-          onChanged();
-        }
-        if (!other.getName().isEmpty()) {
-          name_ = other.name_;
+        return this;
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 6;</code>
+       */
+      public Builder clearTimestamp() {
+        if (timestampBuilder_ == null) {
+          timestamp_ = null;
           onChanged();
+        } else {
+          timestamp_ = null;
+          timestampBuilder_ = null;
         }
-        if (other.hasKpiId()) {
-          mergeKpiId(other.getKpiId());
-        }
-        if (other.hasKpiValueRange()) {
-          mergeKpiValueRange(other.getKpiValueRange());
+
+        return this;
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 6;</code>
+       */
+      public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
+        
+        onChanged();
+        return getTimestampFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 6;</code>
+       */
+      public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
+        if (timestampBuilder_ != null) {
+          return timestampBuilder_.getMessageOrBuilder();
+        } else {
+          return timestamp_ == null ?
+              context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
         }
-        if (!other.getTimestamp().isEmpty()) {
-          timestamp_ = other.timestamp_;
-          onChanged();
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 6;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
+          getTimestampFieldBuilder() {
+        if (timestampBuilder_ == null) {
+          timestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
+                  getTimestamp(),
+                  getParentForChildren(),
+                  isClean());
+          timestamp_ = null;
         }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
+        return timestampBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
       }
 
       @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
       }
 
+
+      // @@protoc_insertion_point(builder_scope:monitoring.AlarmDescriptor)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.AlarmDescriptor)
+    private static final monitoring.Monitoring.AlarmDescriptor DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.AlarmDescriptor();
+    }
+
+    public static monitoring.Monitoring.AlarmDescriptor getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<AlarmDescriptor>
+        PARSER = new com.google.protobuf.AbstractParser<AlarmDescriptor>() {
       @java.lang.Override
-      public Builder mergeFrom(
+      public AlarmDescriptor parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        monitoring.Monitoring.AlarmDescriptor parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.AlarmDescriptor) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new AlarmDescriptor(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<AlarmDescriptor> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<AlarmDescriptor> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.AlarmDescriptor getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface AlarmIDOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.AlarmID)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Uuid alarm_id = 1;</code>
+     * @return Whether the alarmId field is set.
+     */
+    boolean hasAlarmId();
+    /**
+     * <code>.context.Uuid alarm_id = 1;</code>
+     * @return The alarmId.
+     */
+    context.ContextOuterClass.Uuid getAlarmId();
+    /**
+     * <code>.context.Uuid alarm_id = 1;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder();
+  }
+  /**
+   * Protobuf type {@code monitoring.AlarmID}
+   */
+  public static final class AlarmID extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.AlarmID)
+      AlarmIDOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use AlarmID.newBuilder() to construct.
+    private AlarmID(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private AlarmID() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new AlarmID();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private AlarmID(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (alarmId_ != null) {
+                subBuilder = alarmId_.toBuilder();
+              }
+              alarmId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(alarmId_);
+                alarmId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
           }
         }
-        return this;
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
       }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_AlarmID_descriptor;
+    }
 
-      private java.lang.Object alarmDescription_ = "";
-      /**
-       * <code>string alarm_description = 1;</code>
-       * @return The alarmDescription.
-       */
-      public java.lang.String getAlarmDescription() {
-        java.lang.Object ref = alarmDescription_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          alarmDescription_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_AlarmID_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.AlarmID.class, monitoring.Monitoring.AlarmID.Builder.class);
+    }
+
+    public static final int ALARM_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid alarmId_;
+    /**
+     * <code>.context.Uuid alarm_id = 1;</code>
+     * @return Whether the alarmId field is set.
+     */
+    @java.lang.Override
+    public boolean hasAlarmId() {
+      return alarmId_ != null;
+    }
+    /**
+     * <code>.context.Uuid alarm_id = 1;</code>
+     * @return The alarmId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getAlarmId() {
+      return alarmId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_;
+    }
+    /**
+     * <code>.context.Uuid alarm_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder() {
+      return getAlarmId();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (alarmId_ != null) {
+        output.writeMessage(1, getAlarmId());
       }
-      /**
-       * <code>string alarm_description = 1;</code>
-       * @return The bytes for alarmDescription.
-       */
-      public com.google.protobuf.ByteString
-          getAlarmDescriptionBytes() {
-        java.lang.Object ref = alarmDescription_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          alarmDescription_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (alarmId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getAlarmId());
       }
-      /**
-       * <code>string alarm_description = 1;</code>
-       * @param value The alarmDescription to set.
-       * @return This builder for chaining.
-       */
-      public Builder setAlarmDescription(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        alarmDescription_ = value;
-        onChanged();
-        return this;
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
       }
-      /**
-       * <code>string alarm_description = 1;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearAlarmDescription() {
-        
-        alarmDescription_ = getDefaultInstance().getAlarmDescription();
-        onChanged();
-        return this;
+      if (!(obj instanceof monitoring.Monitoring.AlarmID)) {
+        return super.equals(obj);
       }
-      /**
-       * <code>string alarm_description = 1;</code>
-       * @param value The bytes for alarmDescription to set.
-       * @return This builder for chaining.
-       */
-      public Builder setAlarmDescriptionBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        alarmDescription_ = value;
-        onChanged();
-        return this;
+      monitoring.Monitoring.AlarmID other = (monitoring.Monitoring.AlarmID) obj;
+
+      if (hasAlarmId() != other.hasAlarmId()) return false;
+      if (hasAlarmId()) {
+        if (!getAlarmId()
+            .equals(other.getAlarmId())) return false;
       }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
 
-      private java.lang.Object name_ = "";
-      /**
-       * <code>string name = 2;</code>
-       * @return The name.
-       */
-      public java.lang.String getName() {
-        java.lang.Object ref = name_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          name_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
       }
-      /**
-       * <code>string name = 2;</code>
-       * @return The bytes for name.
-       */
-      public com.google.protobuf.ByteString
-          getNameBytes() {
-        java.lang.Object ref = name_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          name_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasAlarmId()) {
+        hash = (37 * hash) + ALARM_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getAlarmId().hashCode();
       }
-      /**
-       * <code>string name = 2;</code>
-       * @param value The name to set.
-       * @return This builder for chaining.
-       */
-      public Builder setName(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        name_ = value;
-        onChanged();
-        return this;
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static monitoring.Monitoring.AlarmID parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.AlarmID parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.AlarmID parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.AlarmID parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.AlarmID parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.AlarmID parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.AlarmID parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.AlarmID parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.AlarmID parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.AlarmID parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.AlarmID parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.AlarmID parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(monitoring.Monitoring.AlarmID prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code monitoring.AlarmID}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:monitoring.AlarmID)
+        monitoring.Monitoring.AlarmIDOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return monitoring.Monitoring.internal_static_monitoring_AlarmID_descriptor;
       }
-      /**
-       * <code>string name = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearName() {
-        
-        name_ = getDefaultInstance().getName();
-        onChanged();
-        return this;
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_AlarmID_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.AlarmID.class, monitoring.Monitoring.AlarmID.Builder.class);
       }
-      /**
-       * <code>string name = 2;</code>
-       * @param value The bytes for name to set.
-       * @return This builder for chaining.
-       */
-      public Builder setNameBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        name_ = value;
-        onChanged();
-        return this;
+
+      // Construct using monitoring.Monitoring.AlarmID.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
       }
 
-      private monitoring.Monitoring.KpiId kpiId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
-      /**
-       * <code>.monitoring.KpiId kpi_id = 3;</code>
-       * @return Whether the kpiId field is set.
-       */
-      public boolean hasKpiId() {
-        return kpiIdBuilder_ != null || kpiId_ != null;
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 3;</code>
-       * @return The kpiId.
-       */
-      public monitoring.Monitoring.KpiId getKpiId() {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
-        } else {
-          return kpiIdBuilder_.getMessage();
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
         }
       }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 3;</code>
-       */
-      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          kpiId_ = value;
-          onChanged();
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (alarmIdBuilder_ == null) {
+          alarmId_ = null;
         } else {
-          kpiIdBuilder_.setMessage(value);
+          alarmId_ = null;
+          alarmIdBuilder_ = null;
         }
-
         return this;
       }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 3;</code>
-       */
-      public Builder setKpiId(
-          monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = builderForValue.build();
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(builderForValue.build());
-        }
 
-        return this;
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_AlarmID_descriptor;
       }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 3;</code>
-       */
-      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (kpiId_ != null) {
-            kpiId_ =
-              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
-          } else {
-            kpiId_ = value;
-          }
-          onChanged();
-        } else {
-          kpiIdBuilder_.mergeFrom(value);
-        }
 
-        return this;
+      @java.lang.Override
+      public monitoring.Monitoring.AlarmID getDefaultInstanceForType() {
+        return monitoring.Monitoring.AlarmID.getDefaultInstance();
       }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 3;</code>
-       */
-      public Builder clearKpiId() {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
-          onChanged();
+
+      @java.lang.Override
+      public monitoring.Monitoring.AlarmID build() {
+        monitoring.Monitoring.AlarmID result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.AlarmID buildPartial() {
+        monitoring.Monitoring.AlarmID result = new monitoring.Monitoring.AlarmID(this);
+        if (alarmIdBuilder_ == null) {
+          result.alarmId_ = alarmId_;
         } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
+          result.alarmId_ = alarmIdBuilder_.build();
         }
+        onBuilt();
+        return result;
+      }
 
-        return this;
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
       }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 3;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
-        
-        onChanged();
-        return getKpiIdFieldBuilder().getBuilder();
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
       }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 3;</code>
-       */
-      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-        if (kpiIdBuilder_ != null) {
-          return kpiIdBuilder_.getMessageOrBuilder();
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.AlarmID) {
+          return mergeFrom((monitoring.Monitoring.AlarmID)other);
         } else {
-          return kpiId_ == null ?
-              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+          super.mergeFrom(other);
+          return this;
         }
       }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 3;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
-          getKpiIdFieldBuilder() {
-        if (kpiIdBuilder_ == null) {
-          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
-                  getKpiId(),
-                  getParentForChildren(),
-                  isClean());
-          kpiId_ = null;
+
+      public Builder mergeFrom(monitoring.Monitoring.AlarmID other) {
+        if (other == monitoring.Monitoring.AlarmID.getDefaultInstance()) return this;
+        if (other.hasAlarmId()) {
+          mergeAlarmId(other.getAlarmId());
         }
-        return kpiIdBuilder_;
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.AlarmID parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.AlarmID) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
       }
 
-      private monitoring.Monitoring.KpiValueRange kpiValueRange_;
+      private context.ContextOuterClass.Uuid alarmId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiValueRange, monitoring.Monitoring.KpiValueRange.Builder, monitoring.Monitoring.KpiValueRangeOrBuilder> kpiValueRangeBuilder_;
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> alarmIdBuilder_;
       /**
-       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
-       * @return Whether the kpiValueRange field is set.
+       * <code>.context.Uuid alarm_id = 1;</code>
+       * @return Whether the alarmId field is set.
        */
-      public boolean hasKpiValueRange() {
-        return kpiValueRangeBuilder_ != null || kpiValueRange_ != null;
+      public boolean hasAlarmId() {
+        return alarmIdBuilder_ != null || alarmId_ != null;
       }
       /**
-       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
-       * @return The kpiValueRange.
+       * <code>.context.Uuid alarm_id = 1;</code>
+       * @return The alarmId.
        */
-      public monitoring.Monitoring.KpiValueRange getKpiValueRange() {
-        if (kpiValueRangeBuilder_ == null) {
-          return kpiValueRange_ == null ? monitoring.Monitoring.KpiValueRange.getDefaultInstance() : kpiValueRange_;
+      public context.ContextOuterClass.Uuid getAlarmId() {
+        if (alarmIdBuilder_ == null) {
+          return alarmId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_;
         } else {
-          return kpiValueRangeBuilder_.getMessage();
+          return alarmIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public Builder setKpiValueRange(monitoring.Monitoring.KpiValueRange value) {
-        if (kpiValueRangeBuilder_ == null) {
+      public Builder setAlarmId(context.ContextOuterClass.Uuid value) {
+        if (alarmIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          kpiValueRange_ = value;
+          alarmId_ = value;
           onChanged();
         } else {
-          kpiValueRangeBuilder_.setMessage(value);
+          alarmIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public Builder setKpiValueRange(
-          monitoring.Monitoring.KpiValueRange.Builder builderForValue) {
-        if (kpiValueRangeBuilder_ == null) {
-          kpiValueRange_ = builderForValue.build();
+      public Builder setAlarmId(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (alarmIdBuilder_ == null) {
+          alarmId_ = builderForValue.build();
           onChanged();
         } else {
-          kpiValueRangeBuilder_.setMessage(builderForValue.build());
+          alarmIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public Builder mergeKpiValueRange(monitoring.Monitoring.KpiValueRange value) {
-        if (kpiValueRangeBuilder_ == null) {
-          if (kpiValueRange_ != null) {
-            kpiValueRange_ =
-              monitoring.Monitoring.KpiValueRange.newBuilder(kpiValueRange_).mergeFrom(value).buildPartial();
+      public Builder mergeAlarmId(context.ContextOuterClass.Uuid value) {
+        if (alarmIdBuilder_ == null) {
+          if (alarmId_ != null) {
+            alarmId_ =
+              context.ContextOuterClass.Uuid.newBuilder(alarmId_).mergeFrom(value).buildPartial();
           } else {
-            kpiValueRange_ = value;
+            alarmId_ = value;
           }
           onChanged();
         } else {
-          kpiValueRangeBuilder_.mergeFrom(value);
+          alarmIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public Builder clearKpiValueRange() {
-        if (kpiValueRangeBuilder_ == null) {
-          kpiValueRange_ = null;
+      public Builder clearAlarmId() {
+        if (alarmIdBuilder_ == null) {
+          alarmId_ = null;
           onChanged();
         } else {
-          kpiValueRange_ = null;
-          kpiValueRangeBuilder_ = null;
+          alarmId_ = null;
+          alarmIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public monitoring.Monitoring.KpiValueRange.Builder getKpiValueRangeBuilder() {
+      public context.ContextOuterClass.Uuid.Builder getAlarmIdBuilder() {
         
         onChanged();
-        return getKpiValueRangeFieldBuilder().getBuilder();
+        return getAlarmIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public monitoring.Monitoring.KpiValueRangeOrBuilder getKpiValueRangeOrBuilder() {
-        if (kpiValueRangeBuilder_ != null) {
-          return kpiValueRangeBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder() {
+        if (alarmIdBuilder_ != null) {
+          return alarmIdBuilder_.getMessageOrBuilder();
         } else {
-          return kpiValueRange_ == null ?
-              monitoring.Monitoring.KpiValueRange.getDefaultInstance() : kpiValueRange_;
+          return alarmId_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_;
         }
       }
       /**
-       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiValueRange, monitoring.Monitoring.KpiValueRange.Builder, monitoring.Monitoring.KpiValueRangeOrBuilder> 
-          getKpiValueRangeFieldBuilder() {
-        if (kpiValueRangeBuilder_ == null) {
-          kpiValueRangeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.KpiValueRange, monitoring.Monitoring.KpiValueRange.Builder, monitoring.Monitoring.KpiValueRangeOrBuilder>(
-                  getKpiValueRange(),
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getAlarmIdFieldBuilder() {
+        if (alarmIdBuilder_ == null) {
+          alarmIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getAlarmId(),
                   getParentForChildren(),
                   isClean());
-          kpiValueRange_ = null;
-        }
-        return kpiValueRangeBuilder_;
-      }
-
-      private java.lang.Object timestamp_ = "";
-      /**
-       * <code>string timestamp = 5;</code>
-       * @return The timestamp.
-       */
-      public java.lang.String getTimestamp() {
-        java.lang.Object ref = timestamp_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          timestamp_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>string timestamp = 5;</code>
-       * @return The bytes for timestamp.
-       */
-      public com.google.protobuf.ByteString
-          getTimestampBytes() {
-        java.lang.Object ref = timestamp_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          timestamp_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
+          alarmId_ = null;
         }
-      }
-      /**
-       * <code>string timestamp = 5;</code>
-       * @param value The timestamp to set.
-       * @return This builder for chaining.
-       */
-      public Builder setTimestamp(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        timestamp_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string timestamp = 5;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearTimestamp() {
-        
-        timestamp_ = getDefaultInstance().getTimestamp();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string timestamp = 5;</code>
-       * @param value The bytes for timestamp to set.
-       * @return This builder for chaining.
-       */
-      public Builder setTimestampBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        timestamp_ = value;
-        onChanged();
-        return this;
+        return alarmIdBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -17399,85 +16419,97 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.AlarmDescriptor)
+      // @@protoc_insertion_point(builder_scope:monitoring.AlarmID)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.AlarmDescriptor)
-    private static final monitoring.Monitoring.AlarmDescriptor DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.AlarmID)
+    private static final monitoring.Monitoring.AlarmID DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.AlarmDescriptor();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.AlarmID();
     }
 
-    public static monitoring.Monitoring.AlarmDescriptor getDefaultInstance() {
+    public static monitoring.Monitoring.AlarmID getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<AlarmDescriptor>
-        PARSER = new com.google.protobuf.AbstractParser<AlarmDescriptor>() {
+    private static final com.google.protobuf.Parser<AlarmID>
+        PARSER = new com.google.protobuf.AbstractParser<AlarmID>() {
       @java.lang.Override
-      public AlarmDescriptor parsePartialFrom(
+      public AlarmID parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new AlarmDescriptor(input, extensionRegistry);
+        return new AlarmID(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<AlarmDescriptor> parser() {
+    public static com.google.protobuf.Parser<AlarmID> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<AlarmDescriptor> getParserForType() {
+    public com.google.protobuf.Parser<AlarmID> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.AlarmDescriptor getDefaultInstanceForType() {
+    public monitoring.Monitoring.AlarmID getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface AlarmIDOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.AlarmID)
+  public interface AlarmSubscriptionOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.AlarmSubscription)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Uuid alarm_id = 1;</code>
-     * @return Whether the alarmId field is set.
+     * <code>.monitoring.AlarmID alarmID = 1;</code>
+     * @return Whether the alarmID field is set.
      */
-    boolean hasAlarmId();
+    boolean hasAlarmID();
     /**
-     * <code>.context.Uuid alarm_id = 1;</code>
-     * @return The alarmId.
+     * <code>.monitoring.AlarmID alarmID = 1;</code>
+     * @return The alarmID.
      */
-    context.ContextOuterClass.Uuid getAlarmId();
+    monitoring.Monitoring.AlarmID getAlarmID();
     /**
-     * <code>.context.Uuid alarm_id = 1;</code>
+     * <code>.monitoring.AlarmID alarmID = 1;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder();
+    monitoring.Monitoring.AlarmIDOrBuilder getAlarmIDOrBuilder();
+
+    /**
+     * <code>float subscription_timeout_s = 2;</code>
+     * @return The subscriptionTimeoutS.
+     */
+    float getSubscriptionTimeoutS();
+
+    /**
+     * <code>float subscription_frequency_ms = 3;</code>
+     * @return The subscriptionFrequencyMs.
+     */
+    float getSubscriptionFrequencyMs();
   }
   /**
-   * Protobuf type {@code monitoring.AlarmID}
+   * Protobuf type {@code monitoring.AlarmSubscription}
    */
-  public static final class AlarmID extends
+  public static final class AlarmSubscription extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.AlarmID)
-      AlarmIDOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.AlarmSubscription)
+      AlarmSubscriptionOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use AlarmID.newBuilder() to construct.
-    private AlarmID(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use AlarmSubscription.newBuilder() to construct.
+    private AlarmSubscription(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private AlarmID() {
+    private AlarmSubscription() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new AlarmID();
+      return new AlarmSubscription();
     }
 
     @java.lang.Override
@@ -17485,7 +16517,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private AlarmID(
+    private AlarmSubscription(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -17504,18 +16536,28 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (alarmId_ != null) {
-                subBuilder = alarmId_.toBuilder();
+              monitoring.Monitoring.AlarmID.Builder subBuilder = null;
+              if (alarmID_ != null) {
+                subBuilder = alarmID_.toBuilder();
               }
-              alarmId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              alarmID_ = input.readMessage(monitoring.Monitoring.AlarmID.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(alarmId_);
-                alarmId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(alarmID_);
+                alarmID_ = subBuilder.buildPartial();
               }
 
               break;
             }
+            case 21: {
+
+              subscriptionTimeoutS_ = input.readFloat();
+              break;
+            }
+            case 29: {
+
+              subscriptionFrequencyMs_ = input.readFloat();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -17537,41 +16579,63 @@ public final class Monitoring {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_AlarmID_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_AlarmSubscription_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_AlarmID_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_AlarmSubscription_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.AlarmID.class, monitoring.Monitoring.AlarmID.Builder.class);
+              monitoring.Monitoring.AlarmSubscription.class, monitoring.Monitoring.AlarmSubscription.Builder.class);
     }
 
-    public static final int ALARM_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Uuid alarmId_;
+    public static final int ALARMID_FIELD_NUMBER = 1;
+    private monitoring.Monitoring.AlarmID alarmID_;
     /**
-     * <code>.context.Uuid alarm_id = 1;</code>
-     * @return Whether the alarmId field is set.
+     * <code>.monitoring.AlarmID alarmID = 1;</code>
+     * @return Whether the alarmID field is set.
      */
     @java.lang.Override
-    public boolean hasAlarmId() {
-      return alarmId_ != null;
+    public boolean hasAlarmID() {
+      return alarmID_ != null;
     }
     /**
-     * <code>.context.Uuid alarm_id = 1;</code>
-     * @return The alarmId.
+     * <code>.monitoring.AlarmID alarmID = 1;</code>
+     * @return The alarmID.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getAlarmId() {
-      return alarmId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_;
+    public monitoring.Monitoring.AlarmID getAlarmID() {
+      return alarmID_ == null ? monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmID_;
     }
     /**
-     * <code>.context.Uuid alarm_id = 1;</code>
+     * <code>.monitoring.AlarmID alarmID = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder() {
-      return getAlarmId();
+    public monitoring.Monitoring.AlarmIDOrBuilder getAlarmIDOrBuilder() {
+      return getAlarmID();
+    }
+
+    public static final int SUBSCRIPTION_TIMEOUT_S_FIELD_NUMBER = 2;
+    private float subscriptionTimeoutS_;
+    /**
+     * <code>float subscription_timeout_s = 2;</code>
+     * @return The subscriptionTimeoutS.
+     */
+    @java.lang.Override
+    public float getSubscriptionTimeoutS() {
+      return subscriptionTimeoutS_;
+    }
+
+    public static final int SUBSCRIPTION_FREQUENCY_MS_FIELD_NUMBER = 3;
+    private float subscriptionFrequencyMs_;
+    /**
+     * <code>float subscription_frequency_ms = 3;</code>
+     * @return The subscriptionFrequencyMs.
+     */
+    @java.lang.Override
+    public float getSubscriptionFrequencyMs() {
+      return subscriptionFrequencyMs_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -17588,8 +16652,14 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (alarmId_ != null) {
-        output.writeMessage(1, getAlarmId());
+      if (alarmID_ != null) {
+        output.writeMessage(1, getAlarmID());
+      }
+      if (subscriptionTimeoutS_ != 0F) {
+        output.writeFloat(2, subscriptionTimeoutS_);
+      }
+      if (subscriptionFrequencyMs_ != 0F) {
+        output.writeFloat(3, subscriptionFrequencyMs_);
       }
       unknownFields.writeTo(output);
     }
@@ -17600,9 +16670,17 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (alarmId_ != null) {
+      if (alarmID_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getAlarmId());
+          .computeMessageSize(1, getAlarmID());
+      }
+      if (subscriptionTimeoutS_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(2, subscriptionTimeoutS_);
+      }
+      if (subscriptionFrequencyMs_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(3, subscriptionFrequencyMs_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -17614,16 +16692,22 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.AlarmID)) {
+      if (!(obj instanceof monitoring.Monitoring.AlarmSubscription)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.AlarmID other = (monitoring.Monitoring.AlarmID) obj;
+      monitoring.Monitoring.AlarmSubscription other = (monitoring.Monitoring.AlarmSubscription) obj;
 
-      if (hasAlarmId() != other.hasAlarmId()) return false;
-      if (hasAlarmId()) {
-        if (!getAlarmId()
-            .equals(other.getAlarmId())) return false;
+      if (hasAlarmID() != other.hasAlarmID()) return false;
+      if (hasAlarmID()) {
+        if (!getAlarmID()
+            .equals(other.getAlarmID())) return false;
       }
+      if (java.lang.Float.floatToIntBits(getSubscriptionTimeoutS())
+          != java.lang.Float.floatToIntBits(
+              other.getSubscriptionTimeoutS())) return false;
+      if (java.lang.Float.floatToIntBits(getSubscriptionFrequencyMs())
+          != java.lang.Float.floatToIntBits(
+              other.getSubscriptionFrequencyMs())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -17635,78 +16719,84 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasAlarmId()) {
-        hash = (37 * hash) + ALARM_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getAlarmId().hashCode();
+      if (hasAlarmID()) {
+        hash = (37 * hash) + ALARMID_FIELD_NUMBER;
+        hash = (53 * hash) + getAlarmID().hashCode();
       }
+      hash = (37 * hash) + SUBSCRIPTION_TIMEOUT_S_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getSubscriptionTimeoutS());
+      hash = (37 * hash) + SUBSCRIPTION_FREQUENCY_MS_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getSubscriptionFrequencyMs());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.AlarmID parseFrom(
+    public static monitoring.Monitoring.AlarmSubscription parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.AlarmID parseFrom(
+    public static monitoring.Monitoring.AlarmSubscription parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.AlarmID parseFrom(
+    public static monitoring.Monitoring.AlarmSubscription parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.AlarmID parseFrom(
+    public static monitoring.Monitoring.AlarmSubscription parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.AlarmID parseFrom(byte[] data)
+    public static monitoring.Monitoring.AlarmSubscription parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.AlarmID parseFrom(
+    public static monitoring.Monitoring.AlarmSubscription parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.AlarmID parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.AlarmSubscription parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.AlarmID parseFrom(
+    public static monitoring.Monitoring.AlarmSubscription parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.AlarmID parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.AlarmSubscription parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.AlarmID parseDelimitedFrom(
+    public static monitoring.Monitoring.AlarmSubscription parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.AlarmID parseFrom(
+    public static monitoring.Monitoring.AlarmSubscription parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.AlarmID parseFrom(
+    public static monitoring.Monitoring.AlarmSubscription parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -17719,7 +16809,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.AlarmID prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.AlarmSubscription prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -17735,26 +16825,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.AlarmID}
+     * Protobuf type {@code monitoring.AlarmSubscription}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.AlarmID)
-        monitoring.Monitoring.AlarmIDOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.AlarmSubscription)
+        monitoring.Monitoring.AlarmSubscriptionOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_AlarmID_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_AlarmSubscription_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_AlarmID_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_AlarmSubscription_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.AlarmID.class, monitoring.Monitoring.AlarmID.Builder.class);
+                monitoring.Monitoring.AlarmSubscription.class, monitoring.Monitoring.AlarmSubscription.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.AlarmID.newBuilder()
+      // Construct using monitoring.Monitoring.AlarmSubscription.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -17772,29 +16862,33 @@ public final class Monitoring {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (alarmIdBuilder_ == null) {
-          alarmId_ = null;
+        if (alarmIDBuilder_ == null) {
+          alarmID_ = null;
         } else {
-          alarmId_ = null;
-          alarmIdBuilder_ = null;
+          alarmID_ = null;
+          alarmIDBuilder_ = null;
         }
+        subscriptionTimeoutS_ = 0F;
+
+        subscriptionFrequencyMs_ = 0F;
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_AlarmID_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_AlarmSubscription_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.AlarmID getDefaultInstanceForType() {
-        return monitoring.Monitoring.AlarmID.getDefaultInstance();
+      public monitoring.Monitoring.AlarmSubscription getDefaultInstanceForType() {
+        return monitoring.Monitoring.AlarmSubscription.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.AlarmID build() {
-        monitoring.Monitoring.AlarmID result = buildPartial();
+      public monitoring.Monitoring.AlarmSubscription build() {
+        monitoring.Monitoring.AlarmSubscription result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -17802,13 +16896,15 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.AlarmID buildPartial() {
-        monitoring.Monitoring.AlarmID result = new monitoring.Monitoring.AlarmID(this);
-        if (alarmIdBuilder_ == null) {
-          result.alarmId_ = alarmId_;
+      public monitoring.Monitoring.AlarmSubscription buildPartial() {
+        monitoring.Monitoring.AlarmSubscription result = new monitoring.Monitoring.AlarmSubscription(this);
+        if (alarmIDBuilder_ == null) {
+          result.alarmID_ = alarmID_;
         } else {
-          result.alarmId_ = alarmIdBuilder_.build();
+          result.alarmID_ = alarmIDBuilder_.build();
         }
+        result.subscriptionTimeoutS_ = subscriptionTimeoutS_;
+        result.subscriptionFrequencyMs_ = subscriptionFrequencyMs_;
         onBuilt();
         return result;
       }
@@ -17847,18 +16943,24 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.AlarmID) {
-          return mergeFrom((monitoring.Monitoring.AlarmID)other);
+        if (other instanceof monitoring.Monitoring.AlarmSubscription) {
+          return mergeFrom((monitoring.Monitoring.AlarmSubscription)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.AlarmID other) {
-        if (other == monitoring.Monitoring.AlarmID.getDefaultInstance()) return this;
-        if (other.hasAlarmId()) {
-          mergeAlarmId(other.getAlarmId());
+      public Builder mergeFrom(monitoring.Monitoring.AlarmSubscription other) {
+        if (other == monitoring.Monitoring.AlarmSubscription.getDefaultInstance()) return this;
+        if (other.hasAlarmID()) {
+          mergeAlarmID(other.getAlarmID());
+        }
+        if (other.getSubscriptionTimeoutS() != 0F) {
+          setSubscriptionTimeoutS(other.getSubscriptionTimeoutS());
+        }
+        if (other.getSubscriptionFrequencyMs() != 0F) {
+          setSubscriptionFrequencyMs(other.getSubscriptionFrequencyMs());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -17875,11 +16977,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.AlarmID parsedMessage = null;
+        monitoring.Monitoring.AlarmSubscription parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.AlarmID) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.AlarmSubscription) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -17889,123 +16991,185 @@ public final class Monitoring {
         return this;
       }
 
-      private context.ContextOuterClass.Uuid alarmId_;
+      private monitoring.Monitoring.AlarmID alarmID_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> alarmIdBuilder_;
+          monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder> alarmIDBuilder_;
       /**
-       * <code>.context.Uuid alarm_id = 1;</code>
-       * @return Whether the alarmId field is set.
+       * <code>.monitoring.AlarmID alarmID = 1;</code>
+       * @return Whether the alarmID field is set.
        */
-      public boolean hasAlarmId() {
-        return alarmIdBuilder_ != null || alarmId_ != null;
+      public boolean hasAlarmID() {
+        return alarmIDBuilder_ != null || alarmID_ != null;
       }
       /**
-       * <code>.context.Uuid alarm_id = 1;</code>
-       * @return The alarmId.
+       * <code>.monitoring.AlarmID alarmID = 1;</code>
+       * @return The alarmID.
        */
-      public context.ContextOuterClass.Uuid getAlarmId() {
-        if (alarmIdBuilder_ == null) {
-          return alarmId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_;
+      public monitoring.Monitoring.AlarmID getAlarmID() {
+        if (alarmIDBuilder_ == null) {
+          return alarmID_ == null ? monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmID_;
         } else {
-          return alarmIdBuilder_.getMessage();
+          return alarmIDBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Uuid alarm_id = 1;</code>
+       * <code>.monitoring.AlarmID alarmID = 1;</code>
        */
-      public Builder setAlarmId(context.ContextOuterClass.Uuid value) {
-        if (alarmIdBuilder_ == null) {
+      public Builder setAlarmID(monitoring.Monitoring.AlarmID value) {
+        if (alarmIDBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          alarmId_ = value;
+          alarmID_ = value;
           onChanged();
         } else {
-          alarmIdBuilder_.setMessage(value);
+          alarmIDBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid alarm_id = 1;</code>
+       * <code>.monitoring.AlarmID alarmID = 1;</code>
        */
-      public Builder setAlarmId(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (alarmIdBuilder_ == null) {
-          alarmId_ = builderForValue.build();
+      public Builder setAlarmID(
+          monitoring.Monitoring.AlarmID.Builder builderForValue) {
+        if (alarmIDBuilder_ == null) {
+          alarmID_ = builderForValue.build();
           onChanged();
         } else {
-          alarmIdBuilder_.setMessage(builderForValue.build());
+          alarmIDBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid alarm_id = 1;</code>
+       * <code>.monitoring.AlarmID alarmID = 1;</code>
        */
-      public Builder mergeAlarmId(context.ContextOuterClass.Uuid value) {
-        if (alarmIdBuilder_ == null) {
-          if (alarmId_ != null) {
-            alarmId_ =
-              context.ContextOuterClass.Uuid.newBuilder(alarmId_).mergeFrom(value).buildPartial();
+      public Builder mergeAlarmID(monitoring.Monitoring.AlarmID value) {
+        if (alarmIDBuilder_ == null) {
+          if (alarmID_ != null) {
+            alarmID_ =
+              monitoring.Monitoring.AlarmID.newBuilder(alarmID_).mergeFrom(value).buildPartial();
           } else {
-            alarmId_ = value;
+            alarmID_ = value;
           }
           onChanged();
         } else {
-          alarmIdBuilder_.mergeFrom(value);
+          alarmIDBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid alarm_id = 1;</code>
+       * <code>.monitoring.AlarmID alarmID = 1;</code>
        */
-      public Builder clearAlarmId() {
-        if (alarmIdBuilder_ == null) {
-          alarmId_ = null;
+      public Builder clearAlarmID() {
+        if (alarmIDBuilder_ == null) {
+          alarmID_ = null;
           onChanged();
         } else {
-          alarmId_ = null;
-          alarmIdBuilder_ = null;
+          alarmID_ = null;
+          alarmIDBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid alarm_id = 1;</code>
+       * <code>.monitoring.AlarmID alarmID = 1;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getAlarmIdBuilder() {
+      public monitoring.Monitoring.AlarmID.Builder getAlarmIDBuilder() {
         
         onChanged();
-        return getAlarmIdFieldBuilder().getBuilder();
+        return getAlarmIDFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Uuid alarm_id = 1;</code>
+       * <code>.monitoring.AlarmID alarmID = 1;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder() {
-        if (alarmIdBuilder_ != null) {
-          return alarmIdBuilder_.getMessageOrBuilder();
+      public monitoring.Monitoring.AlarmIDOrBuilder getAlarmIDOrBuilder() {
+        if (alarmIDBuilder_ != null) {
+          return alarmIDBuilder_.getMessageOrBuilder();
         } else {
-          return alarmId_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_;
+          return alarmID_ == null ?
+              monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmID_;
         }
       }
       /**
-       * <code>.context.Uuid alarm_id = 1;</code>
+       * <code>.monitoring.AlarmID alarmID = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getAlarmIdFieldBuilder() {
-        if (alarmIdBuilder_ == null) {
-          alarmIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getAlarmId(),
+          monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder> 
+          getAlarmIDFieldBuilder() {
+        if (alarmIDBuilder_ == null) {
+          alarmIDBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder>(
+                  getAlarmID(),
                   getParentForChildren(),
                   isClean());
-          alarmId_ = null;
+          alarmID_ = null;
         }
-        return alarmIdBuilder_;
+        return alarmIDBuilder_;
+      }
+
+      private float subscriptionTimeoutS_ ;
+      /**
+       * <code>float subscription_timeout_s = 2;</code>
+       * @return The subscriptionTimeoutS.
+       */
+      @java.lang.Override
+      public float getSubscriptionTimeoutS() {
+        return subscriptionTimeoutS_;
+      }
+      /**
+       * <code>float subscription_timeout_s = 2;</code>
+       * @param value The subscriptionTimeoutS to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSubscriptionTimeoutS(float value) {
+        
+        subscriptionTimeoutS_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>float subscription_timeout_s = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSubscriptionTimeoutS() {
+        
+        subscriptionTimeoutS_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private float subscriptionFrequencyMs_ ;
+      /**
+       * <code>float subscription_frequency_ms = 3;</code>
+       * @return The subscriptionFrequencyMs.
+       */
+      @java.lang.Override
+      public float getSubscriptionFrequencyMs() {
+        return subscriptionFrequencyMs_;
+      }
+      /**
+       * <code>float subscription_frequency_ms = 3;</code>
+       * @param value The subscriptionFrequencyMs to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSubscriptionFrequencyMs(float value) {
+        
+        subscriptionFrequencyMs_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>float subscription_frequency_ms = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSubscriptionFrequencyMs() {
+        
+        subscriptionFrequencyMs_ = 0F;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -18020,41 +17184,41 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.AlarmID)
+      // @@protoc_insertion_point(builder_scope:monitoring.AlarmSubscription)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.AlarmID)
-    private static final monitoring.Monitoring.AlarmID DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.AlarmSubscription)
+    private static final monitoring.Monitoring.AlarmSubscription DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.AlarmID();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.AlarmSubscription();
     }
 
-    public static monitoring.Monitoring.AlarmID getDefaultInstance() {
+    public static monitoring.Monitoring.AlarmSubscription getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<AlarmID>
-        PARSER = new com.google.protobuf.AbstractParser<AlarmID>() {
+    private static final com.google.protobuf.Parser<AlarmSubscription>
+        PARSER = new com.google.protobuf.AbstractParser<AlarmSubscription>() {
       @java.lang.Override
-      public AlarmID parsePartialFrom(
+      public AlarmSubscription parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new AlarmID(input, extensionRegistry);
+        return new AlarmSubscription(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<AlarmID> parser() {
+    public static com.google.protobuf.Parser<AlarmSubscription> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<AlarmID> getParserForType() {
+    public com.google.protobuf.Parser<AlarmSubscription> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.AlarmID getDefaultInstanceForType() {
+    public monitoring.Monitoring.AlarmSubscription getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
@@ -18105,6 +17269,21 @@ public final class Monitoring {
      * <code>.monitoring.KpiValue kpi_value = 3;</code>
      */
     monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder();
+
+    /**
+     * <code>.context.Timestamp timestamp = 4;</code>
+     * @return Whether the timestamp field is set.
+     */
+    boolean hasTimestamp();
+    /**
+     * <code>.context.Timestamp timestamp = 4;</code>
+     * @return The timestamp.
+     */
+    context.ContextOuterClass.Timestamp getTimestamp();
+    /**
+     * <code>.context.Timestamp timestamp = 4;</code>
+     */
+    context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder();
   }
   /**
    * Protobuf type {@code monitoring.AlarmResponse}
@@ -18184,6 +17363,19 @@ public final class Monitoring {
 
               break;
             }
+            case 34: {
+              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
+              if (timestamp_ != null) {
+                subBuilder = timestamp_.toBuilder();
+              }
+              timestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(timestamp_);
+                timestamp_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -18306,6 +17498,32 @@ public final class Monitoring {
       return getKpiValue();
     }
 
+    public static final int TIMESTAMP_FIELD_NUMBER = 4;
+    private context.ContextOuterClass.Timestamp timestamp_;
+    /**
+     * <code>.context.Timestamp timestamp = 4;</code>
+     * @return Whether the timestamp field is set.
+     */
+    @java.lang.Override
+    public boolean hasTimestamp() {
+      return timestamp_ != null;
+    }
+    /**
+     * <code>.context.Timestamp timestamp = 4;</code>
+     * @return The timestamp.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Timestamp getTimestamp() {
+      return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+    }
+    /**
+     * <code>.context.Timestamp timestamp = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
+      return getTimestamp();
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -18329,6 +17547,9 @@ public final class Monitoring {
       if (kpiValue_ != null) {
         output.writeMessage(3, getKpiValue());
       }
+      if (timestamp_ != null) {
+        output.writeMessage(4, getTimestamp());
+      }
       unknownFields.writeTo(output);
     }
 
@@ -18349,6 +17570,10 @@ public final class Monitoring {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(3, getKpiValue());
       }
+      if (timestamp_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, getTimestamp());
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -18376,6 +17601,11 @@ public final class Monitoring {
         if (!getKpiValue()
             .equals(other.getKpiValue())) return false;
       }
+      if (hasTimestamp() != other.hasTimestamp()) return false;
+      if (hasTimestamp()) {
+        if (!getTimestamp()
+            .equals(other.getTimestamp())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -18397,6 +17627,10 @@ public final class Monitoring {
         hash = (37 * hash) + KPI_VALUE_FIELD_NUMBER;
         hash = (53 * hash) + getKpiValue().hashCode();
       }
+      if (hasTimestamp()) {
+        hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
+        hash = (53 * hash) + getTimestamp().hashCode();
+      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -18544,6 +17778,12 @@ public final class Monitoring {
           kpiValue_ = null;
           kpiValueBuilder_ = null;
         }
+        if (timestampBuilder_ == null) {
+          timestamp_ = null;
+        } else {
+          timestamp_ = null;
+          timestampBuilder_ = null;
+        }
         return this;
       }
 
@@ -18581,6 +17821,11 @@ public final class Monitoring {
         } else {
           result.kpiValue_ = kpiValueBuilder_.build();
         }
+        if (timestampBuilder_ == null) {
+          result.timestamp_ = timestamp_;
+        } else {
+          result.timestamp_ = timestampBuilder_.build();
+        }
         onBuilt();
         return result;
       }
@@ -18639,6 +17884,9 @@ public final class Monitoring {
         if (other.hasKpiValue()) {
           mergeKpiValue(other.getKpiValue());
         }
+        if (other.hasTimestamp()) {
+          mergeTimestamp(other.getTimestamp());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -18981,6 +18229,125 @@ public final class Monitoring {
         }
         return kpiValueBuilder_;
       }
+
+      private context.ContextOuterClass.Timestamp timestamp_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> timestampBuilder_;
+      /**
+       * <code>.context.Timestamp timestamp = 4;</code>
+       * @return Whether the timestamp field is set.
+       */
+      public boolean hasTimestamp() {
+        return timestampBuilder_ != null || timestamp_ != null;
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 4;</code>
+       * @return The timestamp.
+       */
+      public context.ContextOuterClass.Timestamp getTimestamp() {
+        if (timestampBuilder_ == null) {
+          return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+        } else {
+          return timestampBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 4;</code>
+       */
+      public Builder setTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (timestampBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          timestamp_ = value;
+          onChanged();
+        } else {
+          timestampBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 4;</code>
+       */
+      public Builder setTimestamp(
+          context.ContextOuterClass.Timestamp.Builder builderForValue) {
+        if (timestampBuilder_ == null) {
+          timestamp_ = builderForValue.build();
+          onChanged();
+        } else {
+          timestampBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 4;</code>
+       */
+      public Builder mergeTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (timestampBuilder_ == null) {
+          if (timestamp_ != null) {
+            timestamp_ =
+              context.ContextOuterClass.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
+          } else {
+            timestamp_ = value;
+          }
+          onChanged();
+        } else {
+          timestampBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 4;</code>
+       */
+      public Builder clearTimestamp() {
+        if (timestampBuilder_ == null) {
+          timestamp_ = null;
+          onChanged();
+        } else {
+          timestamp_ = null;
+          timestampBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 4;</code>
+       */
+      public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
+        
+        onChanged();
+        return getTimestampFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 4;</code>
+       */
+      public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
+        if (timestampBuilder_ != null) {
+          return timestampBuilder_.getMessageOrBuilder();
+        } else {
+          return timestamp_ == null ?
+              context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+        }
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 4;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
+          getTimestampFieldBuilder() {
+        if (timestampBuilder_ == null) {
+          timestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
+                  getTimestamp(),
+                  getParentForChildren(),
+                  isClean());
+          timestamp_ = null;
+        }
+        return timestampBuilder_;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -19832,16 +19199,6 @@ public final class Monitoring {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_monitoring_KpiDescriptor_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_monitoring_BundleKpiDescriptor_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_monitoring_BundleKpiDescriptor_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_monitoring_EditedKpiDescriptor_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_monitoring_EditedKpiDescriptor_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_monitoring_MonitorKpiRequest_descriptor;
   private static final 
@@ -19912,6 +19269,11 @@ public final class Monitoring {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_monitoring_AlarmID_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_AlarmSubscription_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_AlarmSubscription_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_monitoring_AlarmResponse_descriptor;
   private static final 
@@ -19932,97 +19294,95 @@ public final class Monitoring {
   static {
     java.lang.String[] descriptorData = {
       "\n\020monitoring.proto\022\nmonitoring\032\rcontext." +
-      "proto\032\026kpi_sample_types.proto\"\376\001\n\rKpiDes" +
-      "criptor\022\027\n\017kpi_description\030\001 \001(\t\0228\n\017kpi_" +
-      "sample_type\030\002 \001(\0162\037.kpi_sample_types.Kpi" +
-      "SampleType\022$\n\tdevice_id\030\003 \001(\0132\021.context." +
-      "DeviceId\022(\n\013endpoint_id\030\004 \001(\0132\023.context." +
-      "EndPointId\022&\n\nservice_id\030\005 \001(\0132\022.context" +
-      ".ServiceId\022\"\n\010slice_id\030\006 \001(\0132\020.context.S" +
-      "liceId\"\254\002\n\023BundleKpiDescriptor\022\027\n\017kpi_de" +
-      "scription\030\001 \001(\t\022&\n\013kpi_id_list\030\002 \003(\0132\021.m" +
-      "onitoring.KpiId\0228\n\017kpi_sample_type\030\003 \001(\016" +
-      "2\037.kpi_sample_types.KpiSampleType\022$\n\tdev" +
-      "ice_id\030\004 \001(\0132\021.context.DeviceId\022(\n\013endpo" +
-      "int_id\030\005 \001(\0132\023.context.EndPointId\022&\n\nser" +
-      "vice_id\030\006 \001(\0132\022.context.ServiceId\022\"\n\010sli" +
-      "ce_id\030\007 \001(\0132\020.context.SliceId\"\317\002\n\023Edited" +
-      "KpiDescriptor\022!\n\006kpi_id\030\001 \001(\0132\021.monitori" +
-      "ng.KpiId\022\027\n\017kpi_description\030\002 \001(\t\022&\n\013kpi" +
-      "_id_list\030\003 \003(\0132\021.monitoring.KpiId\0228\n\017kpi" +
-      "_sample_type\030\004 \001(\0162\037.kpi_sample_types.Kp" +
-      "iSampleType\022$\n\tdevice_id\030\005 \001(\0132\021.context" +
-      ".DeviceId\022(\n\013endpoint_id\030\006 \001(\0132\023.context" +
-      ".EndPointId\022&\n\nservice_id\030\007 \001(\0132\022.contex" +
-      "t.ServiceId\022\"\n\010slice_id\030\010 \001(\0132\020.context." +
-      "SliceId\"l\n\021MonitorKpiRequest\022!\n\006kpi_id\030\001" +
-      " \001(\0132\021.monitoring.KpiId\022\033\n\023monitoring_wi" +
-      "ndow_s\030\002 \001(\002\022\027\n\017sampling_rate_s\030\003 \001(\002\"\241\001" +
-      "\n\010KpiQuery\022!\n\006kpi_id\030\001 \003(\0132\021.monitoring." +
-      "KpiId\022\033\n\023monitoring_window_s\030\002 \001(\002\022\027\n\017sa" +
-      "mpling_rate_s\030\003 \001(\002\022\026\n\016last_n_samples\030\004 " +
-      "\001(\r\022\022\n\nstart_date\030\005 \001(\t\022\020\n\010end_date\030\006 \001(" +
-      "\t\"&\n\005KpiId\022\035\n\006kpi_id\030\001 \001(\0132\r.context.Uui" +
-      "d\"d\n\003Kpi\022!\n\006kpi_id\030\001 \001(\0132\021.monitoring.Kp" +
-      "iId\022\021\n\ttimestamp\030\002 \001(\t\022\'\n\tkpi_value\030\003 \001(" +
-      "\0132\024.monitoring.KpiValue\"e\n\rKpiValueRange" +
-      "\022)\n\013kpiMinValue\030\001 \001(\0132\024.monitoring.KpiVa" +
-      "lue\022)\n\013kpiMaxValue\030\002 \001(\0132\024.monitoring.Kp" +
-      "iValue\"a\n\010KpiValue\022\020\n\006intVal\030\001 \001(\rH\000\022\022\n\010" +
-      "floatVal\030\002 \001(\002H\000\022\023\n\tstringVal\030\003 \001(\tH\000\022\021\n" +
-      "\007boolVal\030\004 \001(\010H\000B\007\n\005value\",\n\007KpiList\022!\n\010" +
-      "kpi_list\030\001 \003(\0132\017.monitoring.Kpi\"K\n\021KpiDe" +
-      "scriptorList\0226\n\023kpi_descriptor_list\030\001 \003(" +
-      "\0132\031.monitoring.KpiDescriptor\"\223\001\n\016SubsDes" +
+      "proto\032\026kpi_sample_types.proto\"\311\002\n\rKpiDes" +
       "criptor\022!\n\006kpi_id\030\001 \001(\0132\021.monitoring.Kpi" +
-      "Id\022\033\n\023sampling_duration_s\030\002 \001(\002\022\033\n\023sampl" +
-      "ing_interval_s\030\003 \001(\002\022\022\n\nstart_date\030\004 \001(\t" +
-      "\022\020\n\010end_date\030\005 \001(\t\"0\n\016SubscriptionID\022\036\n\007" +
-      "subs_id\030\001 \001(\0132\r.context.Uuid\"b\n\014SubsResp" +
-      "onse\022+\n\007subs_id\030\001 \001(\0132\032.monitoring.Subsc" +
-      "riptionID\022%\n\010kpi_list\030\002 \003(\0132\023.monitoring" +
-      ".KpiList\";\n\nSubsIDList\022-\n\tsubs_list\030\001 \003(" +
-      "\0132\032.monitoring.SubscriptionID\"\244\001\n\017AlarmD" +
-      "escriptor\022\031\n\021alarm_description\030\001 \001(\t\022\014\n\004" +
-      "name\030\002 \001(\t\022!\n\006kpi_id\030\003 \001(\0132\021.monitoring." +
-      "KpiId\0222\n\017kpi_value_range\030\004 \001(\0132\031.monitor" +
-      "ing.KpiValueRange\022\021\n\ttimestamp\030\005 \001(\t\"*\n\007" +
-      "AlarmID\022\037\n\010alarm_id\030\001 \001(\0132\r.context.Uuid" +
-      "\"m\n\rAlarmResponse\022%\n\010alarm_id\030\001 \001(\0132\023.mo" +
-      "nitoring.AlarmID\022\014\n\004text\030\002 \001(\t\022\'\n\tkpi_va" +
-      "lue\030\003 \001(\0132\024.monitoring.KpiValue\"6\n\013Alarm" +
-      "IDList\022\'\n\nalarm_list\030\001 \003(\0132\023.monitoring." +
-      "AlarmID2\271\t\n\021MonitoringService\022;\n\tCreateK" +
-      "pi\022\031.monitoring.KpiDescriptor\032\021.monitori" +
-      "ng.KpiId\"\000\022F\n\021EditKpiDescriptor\022\037.monito" +
-      "ring.EditedKpiDescriptor\032\016.context.Empty" +
-      "\"\000\0220\n\tDeleteKpi\022\021.monitoring.KpiId\032\016.con" +
-      "text.Empty\"\000\022G\n\024GetKpiDescriptorList\022\016.c" +
-      "ontext.Empty\032\035.monitoring.KpiDescriptorL" +
-      "ist\"\000\022G\n\017CreateBundleKpi\022\037.monitoring.Bu" +
-      "ndleKpiDescriptor\032\021.monitoring.KpiId\"\000\022B" +
-      "\n\020GetKpiDescriptor\022\021.monitoring.KpiId\032\031." +
-      "monitoring.KpiDescriptor\"\000\022/\n\nIncludeKpi" +
-      "\022\017.monitoring.Kpi\032\016.context.Empty\"\000\022=\n\nM" +
-      "onitorKpi\022\035.monitoring.MonitorKpiRequest" +
-      "\032\016.context.Empty\"\000\022;\n\014QueryKpiData\022\024.mon" +
-      "itoring.KpiQuery\032\023.monitoring.KpiList\"\000\022" +
-      "C\n\014SubscribeKpi\022\032.monitoring.SubsDescrip" +
-      "tor\032\023.monitoring.KpiList\"\0000\001\022M\n\021GetSubsD" +
-      "escriptor\022\032.monitoring.SubscriptionID\032\032." +
-      "monitoring.SubsDescriptor\"\000\022<\n\020GetSubscr" +
-      "iptions\022\016.context.Empty\032\026.monitoring.Sub" +
-      "sIDList\"\000\022C\n\023EditKpiSubscription\022\032.monit" +
-      "oring.SubsDescriptor\032\016.context.Empty\"\000\022D" +
-      "\n\016CreateKpiAlarm\022\033.monitoring.AlarmDescr" +
-      "iptor\032\023.monitoring.AlarmID\"\000\022=\n\014EditKpiA" +
-      "larm\022\033.monitoring.AlarmDescriptor\032\016.cont" +
-      "ext.Empty\"\000\0226\n\tGetAlarms\022\016.context.Empty" +
-      "\032\027.monitoring.AlarmIDList\"\000\022H\n\022GetAlarmD" +
-      "escriptor\022\023.monitoring.AlarmID\032\033.monitor" +
-      "ing.AlarmDescriptor\"\000\022L\n\026GetAlarmRespons" +
-      "eStream\022\023.monitoring.AlarmID\032\031.monitorin" +
-      "g.AlarmResponse\"\0000\001b\006proto3"
+      "Id\022\027\n\017kpi_description\030\002 \001(\t\022&\n\013kpi_id_li" +
+      "st\030\003 \003(\0132\021.monitoring.KpiId\0228\n\017kpi_sampl" +
+      "e_type\030\004 \001(\0162\037.kpi_sample_types.KpiSampl" +
+      "eType\022$\n\tdevice_id\030\005 \001(\0132\021.context.Devic" +
+      "eId\022(\n\013endpoint_id\030\006 \001(\0132\023.context.EndPo" +
+      "intId\022&\n\nservice_id\030\007 \001(\0132\022.context.Serv" +
+      "iceId\022\"\n\010slice_id\030\010 \001(\0132\020.context.SliceI" +
+      "d\"l\n\021MonitorKpiRequest\022!\n\006kpi_id\030\001 \001(\0132\021" +
+      ".monitoring.KpiId\022\033\n\023monitoring_window_s" +
+      "\030\002 \001(\002\022\027\n\017sampling_rate_s\030\003 \001(\002\"\323\001\n\010KpiQ" +
+      "uery\022!\n\006kpi_id\030\001 \003(\0132\021.monitoring.KpiId\022" +
+      "\033\n\023monitoring_window_s\030\002 \001(\002\022\027\n\017sampling" +
+      "_rate_s\030\003 \001(\002\022\026\n\016last_n_samples\030\004 \001(\r\022+\n" +
+      "\017start_timestamp\030\005 \001(\0132\022.context.Timesta" +
+      "mp\022)\n\rend_timestamp\030\006 \001(\0132\022.context.Time" +
+      "stamp\"&\n\005KpiId\022\035\n\006kpi_id\030\001 \001(\0132\r.context" +
+      ".Uuid\"x\n\003Kpi\022!\n\006kpi_id\030\001 \001(\0132\021.monitorin" +
+      "g.KpiId\022%\n\ttimestamp\030\002 \001(\0132\022.context.Tim" +
+      "estamp\022\'\n\tkpi_value\030\003 \001(\0132\024.monitoring.K" +
+      "piValue\"\250\001\n\rKpiValueRange\022)\n\013kpiMinValue" +
+      "\030\001 \001(\0132\024.monitoring.KpiValue\022)\n\013kpiMaxVa" +
+      "lue\030\002 \001(\0132\024.monitoring.KpiValue\022\017\n\007inRan" +
+      "ge\030\003 \001(\010\022\027\n\017includeMinValue\030\004 \001(\010\022\027\n\017inc" +
+      "ludeMaxValue\030\005 \001(\010\"\241\001\n\010KpiValue\022\022\n\010int32" +
+      "Val\030\001 \001(\005H\000\022\023\n\tuint32Val\030\002 \001(\rH\000\022\022\n\010int6" +
+      "4Val\030\003 \001(\003H\000\022\023\n\tuint64Val\030\004 \001(\004H\000\022\022\n\010flo" +
+      "atVal\030\005 \001(\002H\000\022\023\n\tstringVal\030\006 \001(\tH\000\022\021\n\007bo" +
+      "olVal\030\007 \001(\010H\000B\007\n\005value\",\n\007KpiList\022!\n\010kpi" +
+      "_list\030\001 \003(\0132\017.monitoring.Kpi\"K\n\021KpiDescr" +
+      "iptorList\0226\n\023kpi_descriptor_list\030\001 \003(\0132\031" +
+      ".monitoring.KpiDescriptor\"\362\001\n\016SubsDescri" +
+      "ptor\022+\n\007subs_id\030\001 \001(\0132\032.monitoring.Subsc" +
+      "riptionID\022!\n\006kpi_id\030\002 \001(\0132\021.monitoring.K" +
+      "piId\022\033\n\023sampling_duration_s\030\003 \001(\002\022\033\n\023sam" +
+      "pling_interval_s\030\004 \001(\002\022+\n\017start_timestam" +
+      "p\030\005 \001(\0132\022.context.Timestamp\022)\n\rend_times" +
+      "tamp\030\006 \001(\0132\022.context.Timestamp\"0\n\016Subscr" +
+      "iptionID\022\036\n\007subs_id\030\001 \001(\0132\r.context.Uuid" +
+      "\"b\n\014SubsResponse\022+\n\007subs_id\030\001 \001(\0132\032.moni" +
+      "toring.SubscriptionID\022%\n\010kpi_list\030\002 \003(\0132" +
+      "\023.monitoring.KpiList\";\n\nSubsIDList\022-\n\tsu" +
+      "bs_list\030\001 \003(\0132\032.monitoring.SubscriptionI" +
+      "D\"\337\001\n\017AlarmDescriptor\022%\n\010alarm_id\030\001 \001(\0132" +
+      "\023.monitoring.AlarmID\022\031\n\021alarm_descriptio" +
+      "n\030\002 \001(\t\022\014\n\004name\030\003 \001(\t\022!\n\006kpi_id\030\004 \003(\0132\021." +
+      "monitoring.KpiId\0222\n\017kpi_value_range\030\005 \003(" +
+      "\0132\031.monitoring.KpiValueRange\022%\n\ttimestam" +
+      "p\030\006 \001(\0132\022.context.Timestamp\"*\n\007AlarmID\022\037" +
+      "\n\010alarm_id\030\001 \001(\0132\r.context.Uuid\"|\n\021Alarm" +
+      "Subscription\022$\n\007alarmID\030\001 \001(\0132\023.monitori" +
+      "ng.AlarmID\022\036\n\026subscription_timeout_s\030\002 \001" +
+      "(\002\022!\n\031subscription_frequency_ms\030\003 \001(\002\"\224\001" +
+      "\n\rAlarmResponse\022%\n\010alarm_id\030\001 \001(\0132\023.moni" +
+      "toring.AlarmID\022\014\n\004text\030\002 \001(\t\022\'\n\tkpi_valu" +
+      "e\030\003 \001(\0132\024.monitoring.KpiValue\022%\n\ttimesta" +
+      "mp\030\004 \001(\0132\022.context.Timestamp\"6\n\013AlarmIDL" +
+      "ist\022\'\n\nalarm_list\030\001 \003(\0132\023.monitoring.Ala" +
+      "rmID2\233\t\n\021MonitoringService\0228\n\006SetKpi\022\031.m" +
+      "onitoring.KpiDescriptor\032\021.monitoring.Kpi" +
+      "Id\"\000\0220\n\tDeleteKpi\022\021.monitoring.KpiId\032\016.c" +
+      "ontext.Empty\"\000\022B\n\020GetKpiDescriptor\022\021.mon" +
+      "itoring.KpiId\032\031.monitoring.KpiDescriptor" +
+      "\"\000\022G\n\024GetKpiDescriptorList\022\016.context.Emp" +
+      "ty\032\035.monitoring.KpiDescriptorList\"\000\022/\n\nI" +
+      "ncludeKpi\022\017.monitoring.Kpi\032\016.context.Emp" +
+      "ty\"\000\022=\n\nMonitorKpi\022\035.monitoring.MonitorK" +
+      "piRequest\032\016.context.Empty\"\000\022;\n\014QueryKpiD" +
+      "ata\022\024.monitoring.KpiQuery\032\023.monitoring.K" +
+      "piList\"\000\022I\n\022SetKpiSubscription\022\032.monitor" +
+      "ing.SubsDescriptor\032\023.monitoring.KpiList\"" +
+      "\0000\001\022M\n\021GetSubsDescriptor\022\032.monitoring.Su" +
+      "bscriptionID\032\032.monitoring.SubsDescriptor" +
+      "\"\000\022<\n\020GetSubscriptions\022\016.context.Empty\032\026" +
+      ".monitoring.SubsIDList\"\000\022B\n\022DeleteSubscr" +
+      "iption\022\032.monitoring.SubscriptionID\032\016.con" +
+      "text.Empty\"\000\022A\n\013SetKpiAlarm\022\033.monitoring" +
+      ".AlarmDescriptor\032\023.monitoring.AlarmID\"\000\022" +
+      "6\n\tGetAlarms\022\016.context.Empty\032\027.monitorin" +
+      "g.AlarmIDList\"\000\022H\n\022GetAlarmDescriptor\022\023." +
+      "monitoring.AlarmID\032\033.monitoring.AlarmDes" +
+      "criptor\"\000\022V\n\026GetAlarmResponseStream\022\035.mo" +
+      "nitoring.AlarmSubscription\032\031.monitoring." +
+      "AlarmResponse\"\0000\001\0224\n\013DeleteAlarm\022\023.monit" +
+      "oring.AlarmID\032\016.context.Empty\"\000\0226\n\014GetSt" +
+      "reamKpi\022\021.monitoring.KpiId\032\017.monitoring." +
+      "Kpi\"\0000\001\0229\n\rGetInstantKpi\022\021.monitoring.Kp" +
+      "iId\032\023.monitoring.KpiList\"\000b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -20035,111 +19395,105 @@ public final class Monitoring {
     internal_static_monitoring_KpiDescriptor_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiDescriptor_descriptor,
-        new java.lang.String[] { "KpiDescription", "KpiSampleType", "DeviceId", "EndpointId", "ServiceId", "SliceId", });
-    internal_static_monitoring_BundleKpiDescriptor_descriptor =
-      getDescriptor().getMessageTypes().get(1);
-    internal_static_monitoring_BundleKpiDescriptor_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_monitoring_BundleKpiDescriptor_descriptor,
-        new java.lang.String[] { "KpiDescription", "KpiIdList", "KpiSampleType", "DeviceId", "EndpointId", "ServiceId", "SliceId", });
-    internal_static_monitoring_EditedKpiDescriptor_descriptor =
-      getDescriptor().getMessageTypes().get(2);
-    internal_static_monitoring_EditedKpiDescriptor_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_monitoring_EditedKpiDescriptor_descriptor,
         new java.lang.String[] { "KpiId", "KpiDescription", "KpiIdList", "KpiSampleType", "DeviceId", "EndpointId", "ServiceId", "SliceId", });
     internal_static_monitoring_MonitorKpiRequest_descriptor =
-      getDescriptor().getMessageTypes().get(3);
+      getDescriptor().getMessageTypes().get(1);
     internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_MonitorKpiRequest_descriptor,
         new java.lang.String[] { "KpiId", "MonitoringWindowS", "SamplingRateS", });
     internal_static_monitoring_KpiQuery_descriptor =
-      getDescriptor().getMessageTypes().get(4);
+      getDescriptor().getMessageTypes().get(2);
     internal_static_monitoring_KpiQuery_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiQuery_descriptor,
-        new java.lang.String[] { "KpiId", "MonitoringWindowS", "SamplingRateS", "LastNSamples", "StartDate", "EndDate", });
+        new java.lang.String[] { "KpiId", "MonitoringWindowS", "SamplingRateS", "LastNSamples", "StartTimestamp", "EndTimestamp", });
     internal_static_monitoring_KpiId_descriptor =
-      getDescriptor().getMessageTypes().get(5);
+      getDescriptor().getMessageTypes().get(3);
     internal_static_monitoring_KpiId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiId_descriptor,
         new java.lang.String[] { "KpiId", });
     internal_static_monitoring_Kpi_descriptor =
-      getDescriptor().getMessageTypes().get(6);
+      getDescriptor().getMessageTypes().get(4);
     internal_static_monitoring_Kpi_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_Kpi_descriptor,
         new java.lang.String[] { "KpiId", "Timestamp", "KpiValue", });
     internal_static_monitoring_KpiValueRange_descriptor =
-      getDescriptor().getMessageTypes().get(7);
+      getDescriptor().getMessageTypes().get(5);
     internal_static_monitoring_KpiValueRange_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiValueRange_descriptor,
-        new java.lang.String[] { "KpiMinValue", "KpiMaxValue", });
+        new java.lang.String[] { "KpiMinValue", "KpiMaxValue", "InRange", "IncludeMinValue", "IncludeMaxValue", });
     internal_static_monitoring_KpiValue_descriptor =
-      getDescriptor().getMessageTypes().get(8);
+      getDescriptor().getMessageTypes().get(6);
     internal_static_monitoring_KpiValue_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiValue_descriptor,
-        new java.lang.String[] { "IntVal", "FloatVal", "StringVal", "BoolVal", "Value", });
+        new java.lang.String[] { "Int32Val", "Uint32Val", "Int64Val", "Uint64Val", "FloatVal", "StringVal", "BoolVal", "Value", });
     internal_static_monitoring_KpiList_descriptor =
-      getDescriptor().getMessageTypes().get(9);
+      getDescriptor().getMessageTypes().get(7);
     internal_static_monitoring_KpiList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiList_descriptor,
         new java.lang.String[] { "KpiList", });
     internal_static_monitoring_KpiDescriptorList_descriptor =
-      getDescriptor().getMessageTypes().get(10);
+      getDescriptor().getMessageTypes().get(8);
     internal_static_monitoring_KpiDescriptorList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiDescriptorList_descriptor,
         new java.lang.String[] { "KpiDescriptorList", });
     internal_static_monitoring_SubsDescriptor_descriptor =
-      getDescriptor().getMessageTypes().get(11);
+      getDescriptor().getMessageTypes().get(9);
     internal_static_monitoring_SubsDescriptor_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_SubsDescriptor_descriptor,
-        new java.lang.String[] { "KpiId", "SamplingDurationS", "SamplingIntervalS", "StartDate", "EndDate", });
+        new java.lang.String[] { "SubsId", "KpiId", "SamplingDurationS", "SamplingIntervalS", "StartTimestamp", "EndTimestamp", });
     internal_static_monitoring_SubscriptionID_descriptor =
-      getDescriptor().getMessageTypes().get(12);
+      getDescriptor().getMessageTypes().get(10);
     internal_static_monitoring_SubscriptionID_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_SubscriptionID_descriptor,
         new java.lang.String[] { "SubsId", });
     internal_static_monitoring_SubsResponse_descriptor =
-      getDescriptor().getMessageTypes().get(13);
+      getDescriptor().getMessageTypes().get(11);
     internal_static_monitoring_SubsResponse_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_SubsResponse_descriptor,
         new java.lang.String[] { "SubsId", "KpiList", });
     internal_static_monitoring_SubsIDList_descriptor =
-      getDescriptor().getMessageTypes().get(14);
+      getDescriptor().getMessageTypes().get(12);
     internal_static_monitoring_SubsIDList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_SubsIDList_descriptor,
         new java.lang.String[] { "SubsList", });
     internal_static_monitoring_AlarmDescriptor_descriptor =
-      getDescriptor().getMessageTypes().get(15);
+      getDescriptor().getMessageTypes().get(13);
     internal_static_monitoring_AlarmDescriptor_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_AlarmDescriptor_descriptor,
-        new java.lang.String[] { "AlarmDescription", "Name", "KpiId", "KpiValueRange", "Timestamp", });
+        new java.lang.String[] { "AlarmId", "AlarmDescription", "Name", "KpiId", "KpiValueRange", "Timestamp", });
     internal_static_monitoring_AlarmID_descriptor =
-      getDescriptor().getMessageTypes().get(16);
+      getDescriptor().getMessageTypes().get(14);
     internal_static_monitoring_AlarmID_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_AlarmID_descriptor,
         new java.lang.String[] { "AlarmId", });
+    internal_static_monitoring_AlarmSubscription_descriptor =
+      getDescriptor().getMessageTypes().get(15);
+    internal_static_monitoring_AlarmSubscription_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_monitoring_AlarmSubscription_descriptor,
+        new java.lang.String[] { "AlarmID", "SubscriptionTimeoutS", "SubscriptionFrequencyMs", });
     internal_static_monitoring_AlarmResponse_descriptor =
-      getDescriptor().getMessageTypes().get(17);
+      getDescriptor().getMessageTypes().get(16);
     internal_static_monitoring_AlarmResponse_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_AlarmResponse_descriptor,
-        new java.lang.String[] { "AlarmId", "Text", "KpiValue", });
+        new java.lang.String[] { "AlarmId", "Text", "KpiValue", "Timestamp", });
     internal_static_monitoring_AlarmIDList_descriptor =
-      getDescriptor().getMessageTypes().get(18);
+      getDescriptor().getMessageTypes().get(17);
     internal_static_monitoring_AlarmIDList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_AlarmIDList_descriptor,
diff --git a/src/automation/target/generated-sources/grpc/monitoring/MonitoringService.java b/src/automation/target/generated-sources/grpc/monitoring/MonitoringService.java
index f826e1167d1ed56567fc470ba70cc09003617eda..6372600680d57d0b351e7dd67b88c84f9d8e8cff 100644
--- a/src/automation/target/generated-sources/grpc/monitoring/MonitoringService.java
+++ b/src/automation/target/generated-sources/grpc/monitoring/MonitoringService.java
@@ -8,18 +8,14 @@ comments = "Source: monitoring.proto")
 public interface MonitoringService extends MutinyService {
 
     
-    io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createKpi(monitoring.Monitoring.KpiDescriptor request);
-    
-    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request);
+    io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> setKpi(monitoring.Monitoring.KpiDescriptor request);
     
     io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request);
     
-    io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptorList> getKpiDescriptorList(context.ContextOuterClass.Empty request);
-    
-    io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request);
-    
     io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request);
     
+    io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptorList> getKpiDescriptorList(context.ContextOuterClass.Empty request);
+    
     io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request);
     
     io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> monitorKpi(monitoring.Monitoring.MonitorKpiRequest request);
@@ -30,20 +26,24 @@ public interface MonitoringService extends MutinyService {
     
     io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsIDList> getSubscriptions(context.ContextOuterClass.Empty request);
     
-    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiSubscription(monitoring.Monitoring.SubsDescriptor request);
-    
-    io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request);
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteSubscription(monitoring.Monitoring.SubscriptionID request);
     
-    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request);
+    io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request);
     
     io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmIDList> getAlarms(context.ContextOuterClass.Empty request);
     
     io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(monitoring.Monitoring.AlarmID request);
     
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteAlarm(monitoring.Monitoring.AlarmID request);
+    
+    io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> getInstantKpi(monitoring.Monitoring.KpiId request);
+    
+    
+    io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> setKpiSubscription(monitoring.Monitoring.SubsDescriptor request);
     
-    io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> subscribeKpi(monitoring.Monitoring.SubsDescriptor request);
+    io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription request);
     
-    io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request);
+    io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request);
     
     
 
diff --git a/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java b/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java
index c7f776e7bd0c56cabc7009e7b7bdb208669fb441..21f7f48acd6b6870584133dc3d665f681e78cf5e 100644
--- a/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java
+++ b/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java
@@ -16,25 +16,25 @@ public class MonitoringServiceBean extends MutinyMonitoringServiceGrpc.Monitorin
     }
 
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createKpi(monitoring.Monitoring.KpiDescriptor request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> setKpi(monitoring.Monitoring.KpiDescriptor request) {
        try {
-         return delegate.createKpi(request);
+         return delegate.setKpi(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) {
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request) {
        try {
-         return delegate.editKpiDescriptor(request);
+         return delegate.deleteKpi(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
        try {
-         return delegate.deleteKpi(request);
+         return delegate.getKpiDescriptor(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
@@ -48,115 +48,116 @@ public class MonitoringServiceBean extends MutinyMonitoringServiceGrpc.Monitorin
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request) {
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request) {
        try {
-         return delegate.createBundleKpi(request);
+         return delegate.includeKpi(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> monitorKpi(monitoring.Monitoring.MonitorKpiRequest request) {
        try {
-         return delegate.getKpiDescriptor(request);
+         return delegate.monitorKpi(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery request) {
        try {
-         return delegate.includeKpi(request);
+         return delegate.queryKpiData(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> monitorKpi(monitoring.Monitoring.MonitorKpiRequest request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsDescriptor> getSubsDescriptor(monitoring.Monitoring.SubscriptionID request) {
        try {
-         return delegate.monitorKpi(request);
+         return delegate.getSubsDescriptor(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsIDList> getSubscriptions(context.ContextOuterClass.Empty request) {
        try {
-         return delegate.queryKpiData(request);
+         return delegate.getSubscriptions(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsDescriptor> getSubsDescriptor(monitoring.Monitoring.SubscriptionID request) {
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteSubscription(monitoring.Monitoring.SubscriptionID request) {
        try {
-         return delegate.getSubsDescriptor(request);
+         return delegate.deleteSubscription(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsIDList> getSubscriptions(context.ContextOuterClass.Empty request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
        try {
-         return delegate.getSubscriptions(request);
+         return delegate.setKpiAlarm(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmIDList> getAlarms(context.ContextOuterClass.Empty request) {
        try {
-         return delegate.editKpiSubscription(request);
+         return delegate.getAlarms(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(monitoring.Monitoring.AlarmID request) {
        try {
-         return delegate.createKpiAlarm(request);
+         return delegate.getAlarmDescriptor(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteAlarm(monitoring.Monitoring.AlarmID request) {
        try {
-         return delegate.editKpiAlarm(request);
+         return delegate.deleteAlarm(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmIDList> getAlarms(context.ContextOuterClass.Empty request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> getInstantKpi(monitoring.Monitoring.KpiId request) {
        try {
-         return delegate.getAlarms(request);
+         return delegate.getInstantKpi(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
+
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(monitoring.Monitoring.AlarmID request) {
+    public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> setKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
        try {
-         return delegate.getAlarmDescriptor(request);
+         return delegate.setKpiSubscription(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
 
     @Override
-    public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> subscribeKpi(monitoring.Monitoring.SubsDescriptor request) {
+    public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription request) {
        try {
-         return delegate.subscribeKpi(request);
+         return delegate.getAlarmResponseStream(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
 
     @Override
-    public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request) {
+    public io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request) {
        try {
-         return delegate.getAlarmResponseStream(request);
+         return delegate.getStreamKpi(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
diff --git a/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceClient.java b/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceClient.java
index 35c98e8ff2c240e749e602c4d097c3bef81c8203..6b6dc38645931ad94287b4151019c3b42a1c098d 100644
--- a/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceClient.java
+++ b/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceClient.java
@@ -21,30 +21,22 @@ public class MonitoringServiceClient implements MonitoringService, MutinyClient<
     }
 
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createKpi(monitoring.Monitoring.KpiDescriptor request) {
-       return stub.createKpi(request);
-    }
-    @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) {
-       return stub.editKpiDescriptor(request);
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> setKpi(monitoring.Monitoring.KpiDescriptor request) {
+       return stub.setKpi(request);
     }
     @Override
     public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request) {
        return stub.deleteKpi(request);
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptorList> getKpiDescriptorList(context.ContextOuterClass.Empty request) {
-       return stub.getKpiDescriptorList(request);
-    }
-    @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request) {
-       return stub.createBundleKpi(request);
-    }
-    @Override
     public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
        return stub.getKpiDescriptor(request);
     }
     @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptorList> getKpiDescriptorList(context.ContextOuterClass.Empty request) {
+       return stub.getKpiDescriptorList(request);
+    }
+    @Override
     public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request) {
        return stub.includeKpi(request);
     }
@@ -65,16 +57,12 @@ public class MonitoringServiceClient implements MonitoringService, MutinyClient<
        return stub.getSubscriptions(request);
     }
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
-       return stub.editKpiSubscription(request);
-    }
-    @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
-       return stub.createKpiAlarm(request);
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteSubscription(monitoring.Monitoring.SubscriptionID request) {
+       return stub.deleteSubscription(request);
     }
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
-       return stub.editKpiAlarm(request);
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+       return stub.setKpiAlarm(request);
     }
     @Override
     public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmIDList> getAlarms(context.ContextOuterClass.Empty request) {
@@ -84,15 +72,28 @@ public class MonitoringServiceClient implements MonitoringService, MutinyClient<
     public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(monitoring.Monitoring.AlarmID request) {
        return stub.getAlarmDescriptor(request);
     }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteAlarm(monitoring.Monitoring.AlarmID request) {
+       return stub.deleteAlarm(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> getInstantKpi(monitoring.Monitoring.KpiId request) {
+       return stub.getInstantKpi(request);
+    }
 
     @Override
-    public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> subscribeKpi(monitoring.Monitoring.SubsDescriptor request) {
-       return stub.subscribeKpi(request);
+    public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> setKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
+       return stub.setKpiSubscription(request);
     }
 
     @Override
-    public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request) {
+    public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription request) {
        return stub.getAlarmResponseStream(request);
     }
 
+    @Override
+    public io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request) {
+       return stub.getStreamKpi(request);
+    }
+
 }
\ No newline at end of file
diff --git a/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java b/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java
index d4ae3510a2f622b195854e4c7d197b8e3ff4d5fd..fe92a7814166b65b12db5d50bb4baaf525c59146 100644
--- a/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java
+++ b/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java
@@ -15,96 +15,96 @@ public final class MonitoringServiceGrpc {
 
   // Static method descriptors that strictly reflect the proto.
   private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiDescriptor,
-      monitoring.Monitoring.KpiId> getCreateKpiMethod;
+      monitoring.Monitoring.KpiId> getSetKpiMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "CreateKpi",
+      fullMethodName = SERVICE_NAME + '/' + "SetKpi",
       requestType = monitoring.Monitoring.KpiDescriptor.class,
       responseType = monitoring.Monitoring.KpiId.class,
       methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
   public static io.grpc.MethodDescriptor<monitoring.Monitoring.KpiDescriptor,
-      monitoring.Monitoring.KpiId> getCreateKpiMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiId> getCreateKpiMethod;
-    if ((getCreateKpiMethod = MonitoringServiceGrpc.getCreateKpiMethod) == null) {
+      monitoring.Monitoring.KpiId> getSetKpiMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiId> getSetKpiMethod;
+    if ((getSetKpiMethod = MonitoringServiceGrpc.getSetKpiMethod) == null) {
       synchronized (MonitoringServiceGrpc.class) {
-        if ((getCreateKpiMethod = MonitoringServiceGrpc.getCreateKpiMethod) == null) {
-          MonitoringServiceGrpc.getCreateKpiMethod = getCreateKpiMethod =
+        if ((getSetKpiMethod = MonitoringServiceGrpc.getSetKpiMethod) == null) {
+          MonitoringServiceGrpc.getSetKpiMethod = getSetKpiMethod =
               io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiId>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "CreateKpi"))
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetKpi"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   monitoring.Monitoring.KpiDescriptor.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   monitoring.Monitoring.KpiId.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("CreateKpi"))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("SetKpi"))
               .build();
         }
       }
     }
-    return getCreateKpiMethod;
+    return getSetKpiMethod;
   }
 
-  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.EditedKpiDescriptor,
-      context.ContextOuterClass.Empty> getEditKpiDescriptorMethod;
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
+      context.ContextOuterClass.Empty> getDeleteKpiMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "EditKpiDescriptor",
-      requestType = monitoring.Monitoring.EditedKpiDescriptor.class,
+      fullMethodName = SERVICE_NAME + '/' + "DeleteKpi",
+      requestType = monitoring.Monitoring.KpiId.class,
       responseType = context.ContextOuterClass.Empty.class,
       methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
-  public static io.grpc.MethodDescriptor<monitoring.Monitoring.EditedKpiDescriptor,
-      context.ContextOuterClass.Empty> getEditKpiDescriptorMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.EditedKpiDescriptor, context.ContextOuterClass.Empty> getEditKpiDescriptorMethod;
-    if ((getEditKpiDescriptorMethod = MonitoringServiceGrpc.getEditKpiDescriptorMethod) == null) {
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
+      context.ContextOuterClass.Empty> getDeleteKpiMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId, context.ContextOuterClass.Empty> getDeleteKpiMethod;
+    if ((getDeleteKpiMethod = MonitoringServiceGrpc.getDeleteKpiMethod) == null) {
       synchronized (MonitoringServiceGrpc.class) {
-        if ((getEditKpiDescriptorMethod = MonitoringServiceGrpc.getEditKpiDescriptorMethod) == null) {
-          MonitoringServiceGrpc.getEditKpiDescriptorMethod = getEditKpiDescriptorMethod =
-              io.grpc.MethodDescriptor.<monitoring.Monitoring.EditedKpiDescriptor, context.ContextOuterClass.Empty>newBuilder()
+        if ((getDeleteKpiMethod = MonitoringServiceGrpc.getDeleteKpiMethod) == null) {
+          MonitoringServiceGrpc.getDeleteKpiMethod = getDeleteKpiMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiId, context.ContextOuterClass.Empty>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "EditKpiDescriptor"))
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteKpi"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.EditedKpiDescriptor.getDefaultInstance()))
+                  monitoring.Monitoring.KpiId.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   context.ContextOuterClass.Empty.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("EditKpiDescriptor"))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("DeleteKpi"))
               .build();
         }
       }
     }
-    return getEditKpiDescriptorMethod;
+    return getDeleteKpiMethod;
   }
 
   private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
-      context.ContextOuterClass.Empty> getDeleteKpiMethod;
+      monitoring.Monitoring.KpiDescriptor> getGetKpiDescriptorMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "DeleteKpi",
+      fullMethodName = SERVICE_NAME + '/' + "GetKpiDescriptor",
       requestType = monitoring.Monitoring.KpiId.class,
-      responseType = context.ContextOuterClass.Empty.class,
+      responseType = monitoring.Monitoring.KpiDescriptor.class,
       methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
   public static io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
-      context.ContextOuterClass.Empty> getDeleteKpiMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId, context.ContextOuterClass.Empty> getDeleteKpiMethod;
-    if ((getDeleteKpiMethod = MonitoringServiceGrpc.getDeleteKpiMethod) == null) {
+      monitoring.Monitoring.KpiDescriptor> getGetKpiDescriptorMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiDescriptor> getGetKpiDescriptorMethod;
+    if ((getGetKpiDescriptorMethod = MonitoringServiceGrpc.getGetKpiDescriptorMethod) == null) {
       synchronized (MonitoringServiceGrpc.class) {
-        if ((getDeleteKpiMethod = MonitoringServiceGrpc.getDeleteKpiMethod) == null) {
-          MonitoringServiceGrpc.getDeleteKpiMethod = getDeleteKpiMethod =
-              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiId, context.ContextOuterClass.Empty>newBuilder()
+        if ((getGetKpiDescriptorMethod = MonitoringServiceGrpc.getGetKpiDescriptorMethod) == null) {
+          MonitoringServiceGrpc.getGetKpiDescriptorMethod = getGetKpiDescriptorMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiDescriptor>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteKpi"))
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetKpiDescriptor"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   monitoring.Monitoring.KpiId.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  context.ContextOuterClass.Empty.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("DeleteKpi"))
+                  monitoring.Monitoring.KpiDescriptor.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetKpiDescriptor"))
               .build();
         }
       }
     }
-    return getDeleteKpiMethod;
+    return getGetKpiDescriptorMethod;
   }
 
   private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
@@ -138,68 +138,6 @@ public final class MonitoringServiceGrpc {
     return getGetKpiDescriptorListMethod;
   }
 
-  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.BundleKpiDescriptor,
-      monitoring.Monitoring.KpiId> getCreateBundleKpiMethod;
-
-  @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "CreateBundleKpi",
-      requestType = monitoring.Monitoring.BundleKpiDescriptor.class,
-      responseType = monitoring.Monitoring.KpiId.class,
-      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
-  public static io.grpc.MethodDescriptor<monitoring.Monitoring.BundleKpiDescriptor,
-      monitoring.Monitoring.KpiId> getCreateBundleKpiMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.BundleKpiDescriptor, monitoring.Monitoring.KpiId> getCreateBundleKpiMethod;
-    if ((getCreateBundleKpiMethod = MonitoringServiceGrpc.getCreateBundleKpiMethod) == null) {
-      synchronized (MonitoringServiceGrpc.class) {
-        if ((getCreateBundleKpiMethod = MonitoringServiceGrpc.getCreateBundleKpiMethod) == null) {
-          MonitoringServiceGrpc.getCreateBundleKpiMethod = getCreateBundleKpiMethod =
-              io.grpc.MethodDescriptor.<monitoring.Monitoring.BundleKpiDescriptor, monitoring.Monitoring.KpiId>newBuilder()
-              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "CreateBundleKpi"))
-              .setSampledToLocalTracing(true)
-              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.BundleKpiDescriptor.getDefaultInstance()))
-              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.KpiId.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("CreateBundleKpi"))
-              .build();
-        }
-      }
-    }
-    return getCreateBundleKpiMethod;
-  }
-
-  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
-      monitoring.Monitoring.KpiDescriptor> getGetKpiDescriptorMethod;
-
-  @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "GetKpiDescriptor",
-      requestType = monitoring.Monitoring.KpiId.class,
-      responseType = monitoring.Monitoring.KpiDescriptor.class,
-      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
-  public static io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
-      monitoring.Monitoring.KpiDescriptor> getGetKpiDescriptorMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiDescriptor> getGetKpiDescriptorMethod;
-    if ((getGetKpiDescriptorMethod = MonitoringServiceGrpc.getGetKpiDescriptorMethod) == null) {
-      synchronized (MonitoringServiceGrpc.class) {
-        if ((getGetKpiDescriptorMethod = MonitoringServiceGrpc.getGetKpiDescriptorMethod) == null) {
-          MonitoringServiceGrpc.getGetKpiDescriptorMethod = getGetKpiDescriptorMethod =
-              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiDescriptor>newBuilder()
-              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetKpiDescriptor"))
-              .setSampledToLocalTracing(true)
-              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.KpiId.getDefaultInstance()))
-              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.KpiDescriptor.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetKpiDescriptor"))
-              .build();
-        }
-      }
-    }
-    return getGetKpiDescriptorMethod;
-  }
-
   private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.Kpi,
       context.ContextOuterClass.Empty> getIncludeKpiMethod;
 
@@ -294,34 +232,34 @@ public final class MonitoringServiceGrpc {
   }
 
   private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor,
-      monitoring.Monitoring.KpiList> getSubscribeKpiMethod;
+      monitoring.Monitoring.KpiList> getSetKpiSubscriptionMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "SubscribeKpi",
+      fullMethodName = SERVICE_NAME + '/' + "SetKpiSubscription",
       requestType = monitoring.Monitoring.SubsDescriptor.class,
       responseType = monitoring.Monitoring.KpiList.class,
       methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
   public static io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor,
-      monitoring.Monitoring.KpiList> getSubscribeKpiMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor, monitoring.Monitoring.KpiList> getSubscribeKpiMethod;
-    if ((getSubscribeKpiMethod = MonitoringServiceGrpc.getSubscribeKpiMethod) == null) {
+      monitoring.Monitoring.KpiList> getSetKpiSubscriptionMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor, monitoring.Monitoring.KpiList> getSetKpiSubscriptionMethod;
+    if ((getSetKpiSubscriptionMethod = MonitoringServiceGrpc.getSetKpiSubscriptionMethod) == null) {
       synchronized (MonitoringServiceGrpc.class) {
-        if ((getSubscribeKpiMethod = MonitoringServiceGrpc.getSubscribeKpiMethod) == null) {
-          MonitoringServiceGrpc.getSubscribeKpiMethod = getSubscribeKpiMethod =
+        if ((getSetKpiSubscriptionMethod = MonitoringServiceGrpc.getSetKpiSubscriptionMethod) == null) {
+          MonitoringServiceGrpc.getSetKpiSubscriptionMethod = getSetKpiSubscriptionMethod =
               io.grpc.MethodDescriptor.<monitoring.Monitoring.SubsDescriptor, monitoring.Monitoring.KpiList>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SubscribeKpi"))
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetKpiSubscription"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   monitoring.Monitoring.SubsDescriptor.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   monitoring.Monitoring.KpiList.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("SubscribeKpi"))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("SetKpiSubscription"))
               .build();
         }
       }
     }
-    return getSubscribeKpiMethod;
+    return getSetKpiSubscriptionMethod;
   }
 
   private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.SubscriptionID,
@@ -386,97 +324,66 @@ public final class MonitoringServiceGrpc {
     return getGetSubscriptionsMethod;
   }
 
-  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor,
-      context.ContextOuterClass.Empty> getEditKpiSubscriptionMethod;
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.SubscriptionID,
+      context.ContextOuterClass.Empty> getDeleteSubscriptionMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "EditKpiSubscription",
-      requestType = monitoring.Monitoring.SubsDescriptor.class,
+      fullMethodName = SERVICE_NAME + '/' + "DeleteSubscription",
+      requestType = monitoring.Monitoring.SubscriptionID.class,
       responseType = context.ContextOuterClass.Empty.class,
       methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
-  public static io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor,
-      context.ContextOuterClass.Empty> getEditKpiSubscriptionMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor, context.ContextOuterClass.Empty> getEditKpiSubscriptionMethod;
-    if ((getEditKpiSubscriptionMethod = MonitoringServiceGrpc.getEditKpiSubscriptionMethod) == null) {
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.SubscriptionID,
+      context.ContextOuterClass.Empty> getDeleteSubscriptionMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.SubscriptionID, context.ContextOuterClass.Empty> getDeleteSubscriptionMethod;
+    if ((getDeleteSubscriptionMethod = MonitoringServiceGrpc.getDeleteSubscriptionMethod) == null) {
       synchronized (MonitoringServiceGrpc.class) {
-        if ((getEditKpiSubscriptionMethod = MonitoringServiceGrpc.getEditKpiSubscriptionMethod) == null) {
-          MonitoringServiceGrpc.getEditKpiSubscriptionMethod = getEditKpiSubscriptionMethod =
-              io.grpc.MethodDescriptor.<monitoring.Monitoring.SubsDescriptor, context.ContextOuterClass.Empty>newBuilder()
+        if ((getDeleteSubscriptionMethod = MonitoringServiceGrpc.getDeleteSubscriptionMethod) == null) {
+          MonitoringServiceGrpc.getDeleteSubscriptionMethod = getDeleteSubscriptionMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.SubscriptionID, context.ContextOuterClass.Empty>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "EditKpiSubscription"))
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteSubscription"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.SubsDescriptor.getDefaultInstance()))
+                  monitoring.Monitoring.SubscriptionID.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   context.ContextOuterClass.Empty.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("EditKpiSubscription"))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("DeleteSubscription"))
               .build();
         }
       }
     }
-    return getEditKpiSubscriptionMethod;
+    return getDeleteSubscriptionMethod;
   }
 
   private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor,
-      monitoring.Monitoring.AlarmID> getCreateKpiAlarmMethod;
+      monitoring.Monitoring.AlarmID> getSetKpiAlarmMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "CreateKpiAlarm",
+      fullMethodName = SERVICE_NAME + '/' + "SetKpiAlarm",
       requestType = monitoring.Monitoring.AlarmDescriptor.class,
       responseType = monitoring.Monitoring.AlarmID.class,
       methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
   public static io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor,
-      monitoring.Monitoring.AlarmID> getCreateKpiAlarmMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor, monitoring.Monitoring.AlarmID> getCreateKpiAlarmMethod;
-    if ((getCreateKpiAlarmMethod = MonitoringServiceGrpc.getCreateKpiAlarmMethod) == null) {
+      monitoring.Monitoring.AlarmID> getSetKpiAlarmMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor, monitoring.Monitoring.AlarmID> getSetKpiAlarmMethod;
+    if ((getSetKpiAlarmMethod = MonitoringServiceGrpc.getSetKpiAlarmMethod) == null) {
       synchronized (MonitoringServiceGrpc.class) {
-        if ((getCreateKpiAlarmMethod = MonitoringServiceGrpc.getCreateKpiAlarmMethod) == null) {
-          MonitoringServiceGrpc.getCreateKpiAlarmMethod = getCreateKpiAlarmMethod =
+        if ((getSetKpiAlarmMethod = MonitoringServiceGrpc.getSetKpiAlarmMethod) == null) {
+          MonitoringServiceGrpc.getSetKpiAlarmMethod = getSetKpiAlarmMethod =
               io.grpc.MethodDescriptor.<monitoring.Monitoring.AlarmDescriptor, monitoring.Monitoring.AlarmID>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "CreateKpiAlarm"))
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetKpiAlarm"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   monitoring.Monitoring.AlarmDescriptor.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   monitoring.Monitoring.AlarmID.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("CreateKpiAlarm"))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("SetKpiAlarm"))
               .build();
         }
       }
     }
-    return getCreateKpiAlarmMethod;
-  }
-
-  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor,
-      context.ContextOuterClass.Empty> getEditKpiAlarmMethod;
-
-  @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "EditKpiAlarm",
-      requestType = monitoring.Monitoring.AlarmDescriptor.class,
-      responseType = context.ContextOuterClass.Empty.class,
-      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
-  public static io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor,
-      context.ContextOuterClass.Empty> getEditKpiAlarmMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor, context.ContextOuterClass.Empty> getEditKpiAlarmMethod;
-    if ((getEditKpiAlarmMethod = MonitoringServiceGrpc.getEditKpiAlarmMethod) == null) {
-      synchronized (MonitoringServiceGrpc.class) {
-        if ((getEditKpiAlarmMethod = MonitoringServiceGrpc.getEditKpiAlarmMethod) == null) {
-          MonitoringServiceGrpc.getEditKpiAlarmMethod = getEditKpiAlarmMethod =
-              io.grpc.MethodDescriptor.<monitoring.Monitoring.AlarmDescriptor, context.ContextOuterClass.Empty>newBuilder()
-              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "EditKpiAlarm"))
-              .setSampledToLocalTracing(true)
-              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.AlarmDescriptor.getDefaultInstance()))
-              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  context.ContextOuterClass.Empty.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("EditKpiAlarm"))
-              .build();
-        }
-      }
-    }
-    return getEditKpiAlarmMethod;
+    return getSetKpiAlarmMethod;
   }
 
   private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
@@ -541,27 +448,27 @@ public final class MonitoringServiceGrpc {
     return getGetAlarmDescriptorMethod;
   }
 
-  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID,
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmSubscription,
       monitoring.Monitoring.AlarmResponse> getGetAlarmResponseStreamMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
       fullMethodName = SERVICE_NAME + '/' + "GetAlarmResponseStream",
-      requestType = monitoring.Monitoring.AlarmID.class,
+      requestType = monitoring.Monitoring.AlarmSubscription.class,
       responseType = monitoring.Monitoring.AlarmResponse.class,
       methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
-  public static io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID,
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmSubscription,
       monitoring.Monitoring.AlarmResponse> getGetAlarmResponseStreamMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmResponse> getGetAlarmResponseStreamMethod;
+    io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmSubscription, monitoring.Monitoring.AlarmResponse> getGetAlarmResponseStreamMethod;
     if ((getGetAlarmResponseStreamMethod = MonitoringServiceGrpc.getGetAlarmResponseStreamMethod) == null) {
       synchronized (MonitoringServiceGrpc.class) {
         if ((getGetAlarmResponseStreamMethod = MonitoringServiceGrpc.getGetAlarmResponseStreamMethod) == null) {
           MonitoringServiceGrpc.getGetAlarmResponseStreamMethod = getGetAlarmResponseStreamMethod =
-              io.grpc.MethodDescriptor.<monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmResponse>newBuilder()
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.AlarmSubscription, monitoring.Monitoring.AlarmResponse>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
               .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetAlarmResponseStream"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.AlarmID.getDefaultInstance()))
+                  monitoring.Monitoring.AlarmSubscription.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   monitoring.Monitoring.AlarmResponse.getDefaultInstance()))
               .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetAlarmResponseStream"))
@@ -572,6 +479,99 @@ public final class MonitoringServiceGrpc {
     return getGetAlarmResponseStreamMethod;
   }
 
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID,
+      context.ContextOuterClass.Empty> getDeleteAlarmMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "DeleteAlarm",
+      requestType = monitoring.Monitoring.AlarmID.class,
+      responseType = context.ContextOuterClass.Empty.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID,
+      context.ContextOuterClass.Empty> getDeleteAlarmMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID, context.ContextOuterClass.Empty> getDeleteAlarmMethod;
+    if ((getDeleteAlarmMethod = MonitoringServiceGrpc.getDeleteAlarmMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getDeleteAlarmMethod = MonitoringServiceGrpc.getDeleteAlarmMethod) == null) {
+          MonitoringServiceGrpc.getDeleteAlarmMethod = getDeleteAlarmMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.AlarmID, context.ContextOuterClass.Empty>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteAlarm"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.AlarmID.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("DeleteAlarm"))
+              .build();
+        }
+      }
+    }
+    return getDeleteAlarmMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
+      monitoring.Monitoring.Kpi> getGetStreamKpiMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetStreamKpi",
+      requestType = monitoring.Monitoring.KpiId.class,
+      responseType = monitoring.Monitoring.Kpi.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
+      monitoring.Monitoring.Kpi> getGetStreamKpiMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId, monitoring.Monitoring.Kpi> getGetStreamKpiMethod;
+    if ((getGetStreamKpiMethod = MonitoringServiceGrpc.getGetStreamKpiMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getGetStreamKpiMethod = MonitoringServiceGrpc.getGetStreamKpiMethod) == null) {
+          MonitoringServiceGrpc.getGetStreamKpiMethod = getGetStreamKpiMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiId, monitoring.Monitoring.Kpi>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetStreamKpi"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.KpiId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.Kpi.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetStreamKpi"))
+              .build();
+        }
+      }
+    }
+    return getGetStreamKpiMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
+      monitoring.Monitoring.KpiList> getGetInstantKpiMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetInstantKpi",
+      requestType = monitoring.Monitoring.KpiId.class,
+      responseType = monitoring.Monitoring.KpiList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
+      monitoring.Monitoring.KpiList> getGetInstantKpiMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiList> getGetInstantKpiMethod;
+    if ((getGetInstantKpiMethod = MonitoringServiceGrpc.getGetInstantKpiMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getGetInstantKpiMethod = MonitoringServiceGrpc.getGetInstantKpiMethod) == null) {
+          MonitoringServiceGrpc.getGetInstantKpiMethod = getGetInstantKpiMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetInstantKpi"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.KpiId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.KpiList.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetInstantKpi"))
+              .build();
+        }
+      }
+    }
+    return getGetInstantKpiMethod;
+  }
+
   /**
    * Creates a new async stub that supports all call types for the service
    */
@@ -622,23 +622,23 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public void createKpi(monitoring.Monitoring.KpiDescriptor request,
+    public void setKpi(monitoring.Monitoring.KpiDescriptor request,
         io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getCreateKpiMethod(), responseObserver);
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetKpiMethod(), responseObserver);
     }
 
     /**
      */
-    public void editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request,
+    public void deleteKpi(monitoring.Monitoring.KpiId request,
         io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getEditKpiDescriptorMethod(), responseObserver);
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteKpiMethod(), responseObserver);
     }
 
     /**
      */
-    public void deleteKpi(monitoring.Monitoring.KpiId request,
-        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteKpiMethod(), responseObserver);
+    public void getKpiDescriptor(monitoring.Monitoring.KpiId request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetKpiDescriptorMethod(), responseObserver);
     }
 
     /**
@@ -648,20 +648,6 @@ public final class MonitoringServiceGrpc {
       io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetKpiDescriptorListMethod(), responseObserver);
     }
 
-    /**
-     */
-    public void createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request,
-        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getCreateBundleKpiMethod(), responseObserver);
-    }
-
-    /**
-     */
-    public void getKpiDescriptor(monitoring.Monitoring.KpiId request,
-        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetKpiDescriptorMethod(), responseObserver);
-    }
-
     /**
      */
     public void includeKpi(monitoring.Monitoring.Kpi request,
@@ -685,9 +671,9 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public void subscribeKpi(monitoring.Monitoring.SubsDescriptor request,
+    public void setKpiSubscription(monitoring.Monitoring.SubsDescriptor request,
         io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSubscribeKpiMethod(), responseObserver);
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetKpiSubscriptionMethod(), responseObserver);
     }
 
     /**
@@ -706,23 +692,16 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public void editKpiSubscription(monitoring.Monitoring.SubsDescriptor request,
+    public void deleteSubscription(monitoring.Monitoring.SubscriptionID request,
         io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getEditKpiSubscriptionMethod(), responseObserver);
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteSubscriptionMethod(), responseObserver);
     }
 
     /**
      */
-    public void createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request,
+    public void setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request,
         io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmID> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getCreateKpiAlarmMethod(), responseObserver);
-    }
-
-    /**
-     */
-    public void editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request,
-        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getEditKpiAlarmMethod(), responseObserver);
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetKpiAlarmMethod(), responseObserver);
     }
 
     /**
@@ -741,34 +720,55 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public void getAlarmResponseStream(monitoring.Monitoring.AlarmID request,
+    public void getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription request,
         io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmResponse> responseObserver) {
       io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetAlarmResponseStreamMethod(), responseObserver);
     }
 
+    /**
+     */
+    public void deleteAlarm(monitoring.Monitoring.AlarmID request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteAlarmMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getStreamKpi(monitoring.Monitoring.KpiId request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetStreamKpiMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getInstantKpi(monitoring.Monitoring.KpiId request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetInstantKpiMethod(), responseObserver);
+    }
+
     @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
       return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
           .addMethod(
-            getCreateKpiMethod(),
+            getSetKpiMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
               new MethodHandlers<
                 monitoring.Monitoring.KpiDescriptor,
                 monitoring.Monitoring.KpiId>(
-                  this, METHODID_CREATE_KPI)))
+                  this, METHODID_SET_KPI)))
           .addMethod(
-            getEditKpiDescriptorMethod(),
+            getDeleteKpiMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
               new MethodHandlers<
-                monitoring.Monitoring.EditedKpiDescriptor,
+                monitoring.Monitoring.KpiId,
                 context.ContextOuterClass.Empty>(
-                  this, METHODID_EDIT_KPI_DESCRIPTOR)))
+                  this, METHODID_DELETE_KPI)))
           .addMethod(
-            getDeleteKpiMethod(),
+            getGetKpiDescriptorMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
               new MethodHandlers<
                 monitoring.Monitoring.KpiId,
-                context.ContextOuterClass.Empty>(
-                  this, METHODID_DELETE_KPI)))
+                monitoring.Monitoring.KpiDescriptor>(
+                  this, METHODID_GET_KPI_DESCRIPTOR)))
           .addMethod(
             getGetKpiDescriptorListMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
@@ -776,20 +776,6 @@ public final class MonitoringServiceGrpc {
                 context.ContextOuterClass.Empty,
                 monitoring.Monitoring.KpiDescriptorList>(
                   this, METHODID_GET_KPI_DESCRIPTOR_LIST)))
-          .addMethod(
-            getCreateBundleKpiMethod(),
-            io.grpc.stub.ServerCalls.asyncUnaryCall(
-              new MethodHandlers<
-                monitoring.Monitoring.BundleKpiDescriptor,
-                monitoring.Monitoring.KpiId>(
-                  this, METHODID_CREATE_BUNDLE_KPI)))
-          .addMethod(
-            getGetKpiDescriptorMethod(),
-            io.grpc.stub.ServerCalls.asyncUnaryCall(
-              new MethodHandlers<
-                monitoring.Monitoring.KpiId,
-                monitoring.Monitoring.KpiDescriptor>(
-                  this, METHODID_GET_KPI_DESCRIPTOR)))
           .addMethod(
             getIncludeKpiMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
@@ -812,12 +798,12 @@ public final class MonitoringServiceGrpc {
                 monitoring.Monitoring.KpiList>(
                   this, METHODID_QUERY_KPI_DATA)))
           .addMethod(
-            getSubscribeKpiMethod(),
+            getSetKpiSubscriptionMethod(),
             io.grpc.stub.ServerCalls.asyncServerStreamingCall(
               new MethodHandlers<
                 monitoring.Monitoring.SubsDescriptor,
                 monitoring.Monitoring.KpiList>(
-                  this, METHODID_SUBSCRIBE_KPI)))
+                  this, METHODID_SET_KPI_SUBSCRIPTION)))
           .addMethod(
             getGetSubsDescriptorMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
@@ -833,26 +819,19 @@ public final class MonitoringServiceGrpc {
                 monitoring.Monitoring.SubsIDList>(
                   this, METHODID_GET_SUBSCRIPTIONS)))
           .addMethod(
-            getEditKpiSubscriptionMethod(),
+            getDeleteSubscriptionMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
               new MethodHandlers<
-                monitoring.Monitoring.SubsDescriptor,
+                monitoring.Monitoring.SubscriptionID,
                 context.ContextOuterClass.Empty>(
-                  this, METHODID_EDIT_KPI_SUBSCRIPTION)))
+                  this, METHODID_DELETE_SUBSCRIPTION)))
           .addMethod(
-            getCreateKpiAlarmMethod(),
+            getSetKpiAlarmMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
               new MethodHandlers<
                 monitoring.Monitoring.AlarmDescriptor,
                 monitoring.Monitoring.AlarmID>(
-                  this, METHODID_CREATE_KPI_ALARM)))
-          .addMethod(
-            getEditKpiAlarmMethod(),
-            io.grpc.stub.ServerCalls.asyncUnaryCall(
-              new MethodHandlers<
-                monitoring.Monitoring.AlarmDescriptor,
-                context.ContextOuterClass.Empty>(
-                  this, METHODID_EDIT_KPI_ALARM)))
+                  this, METHODID_SET_KPI_ALARM)))
           .addMethod(
             getGetAlarmsMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
@@ -871,9 +850,30 @@ public final class MonitoringServiceGrpc {
             getGetAlarmResponseStreamMethod(),
             io.grpc.stub.ServerCalls.asyncServerStreamingCall(
               new MethodHandlers<
-                monitoring.Monitoring.AlarmID,
+                monitoring.Monitoring.AlarmSubscription,
                 monitoring.Monitoring.AlarmResponse>(
                   this, METHODID_GET_ALARM_RESPONSE_STREAM)))
+          .addMethod(
+            getDeleteAlarmMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                monitoring.Monitoring.AlarmID,
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_DELETE_ALARM)))
+          .addMethod(
+            getGetStreamKpiMethod(),
+            io.grpc.stub.ServerCalls.asyncServerStreamingCall(
+              new MethodHandlers<
+                monitoring.Monitoring.KpiId,
+                monitoring.Monitoring.Kpi>(
+                  this, METHODID_GET_STREAM_KPI)))
+          .addMethod(
+            getGetInstantKpiMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                monitoring.Monitoring.KpiId,
+                monitoring.Monitoring.KpiList>(
+                  this, METHODID_GET_INSTANT_KPI)))
           .build();
     }
   }
@@ -894,26 +894,26 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public void createKpi(monitoring.Monitoring.KpiDescriptor request,
+    public void setKpi(monitoring.Monitoring.KpiDescriptor request,
         io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId> responseObserver) {
       io.grpc.stub.ClientCalls.asyncUnaryCall(
-          getChannel().newCall(getCreateKpiMethod(), getCallOptions()), request, responseObserver);
+          getChannel().newCall(getSetKpiMethod(), getCallOptions()), request, responseObserver);
     }
 
     /**
      */
-    public void editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request,
+    public void deleteKpi(monitoring.Monitoring.KpiId request,
         io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
       io.grpc.stub.ClientCalls.asyncUnaryCall(
-          getChannel().newCall(getEditKpiDescriptorMethod(), getCallOptions()), request, responseObserver);
+          getChannel().newCall(getDeleteKpiMethod(), getCallOptions()), request, responseObserver);
     }
 
     /**
      */
-    public void deleteKpi(monitoring.Monitoring.KpiId request,
-        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+    public void getKpiDescriptor(monitoring.Monitoring.KpiId request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor> responseObserver) {
       io.grpc.stub.ClientCalls.asyncUnaryCall(
-          getChannel().newCall(getDeleteKpiMethod(), getCallOptions()), request, responseObserver);
+          getChannel().newCall(getGetKpiDescriptorMethod(), getCallOptions()), request, responseObserver);
     }
 
     /**
@@ -924,22 +924,6 @@ public final class MonitoringServiceGrpc {
           getChannel().newCall(getGetKpiDescriptorListMethod(), getCallOptions()), request, responseObserver);
     }
 
-    /**
-     */
-    public void createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request,
-        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId> responseObserver) {
-      io.grpc.stub.ClientCalls.asyncUnaryCall(
-          getChannel().newCall(getCreateBundleKpiMethod(), getCallOptions()), request, responseObserver);
-    }
-
-    /**
-     */
-    public void getKpiDescriptor(monitoring.Monitoring.KpiId request,
-        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor> responseObserver) {
-      io.grpc.stub.ClientCalls.asyncUnaryCall(
-          getChannel().newCall(getGetKpiDescriptorMethod(), getCallOptions()), request, responseObserver);
-    }
-
     /**
      */
     public void includeKpi(monitoring.Monitoring.Kpi request,
@@ -966,10 +950,10 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public void subscribeKpi(monitoring.Monitoring.SubsDescriptor request,
+    public void setKpiSubscription(monitoring.Monitoring.SubsDescriptor request,
         io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList> responseObserver) {
       io.grpc.stub.ClientCalls.asyncServerStreamingCall(
-          getChannel().newCall(getSubscribeKpiMethod(), getCallOptions()), request, responseObserver);
+          getChannel().newCall(getSetKpiSubscriptionMethod(), getCallOptions()), request, responseObserver);
     }
 
     /**
@@ -990,26 +974,18 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public void editKpiSubscription(monitoring.Monitoring.SubsDescriptor request,
+    public void deleteSubscription(monitoring.Monitoring.SubscriptionID request,
         io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
       io.grpc.stub.ClientCalls.asyncUnaryCall(
-          getChannel().newCall(getEditKpiSubscriptionMethod(), getCallOptions()), request, responseObserver);
+          getChannel().newCall(getDeleteSubscriptionMethod(), getCallOptions()), request, responseObserver);
     }
 
     /**
      */
-    public void createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request,
+    public void setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request,
         io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmID> responseObserver) {
       io.grpc.stub.ClientCalls.asyncUnaryCall(
-          getChannel().newCall(getCreateKpiAlarmMethod(), getCallOptions()), request, responseObserver);
-    }
-
-    /**
-     */
-    public void editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request,
-        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
-      io.grpc.stub.ClientCalls.asyncUnaryCall(
-          getChannel().newCall(getEditKpiAlarmMethod(), getCallOptions()), request, responseObserver);
+          getChannel().newCall(getSetKpiAlarmMethod(), getCallOptions()), request, responseObserver);
     }
 
     /**
@@ -1030,11 +1006,35 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public void getAlarmResponseStream(monitoring.Monitoring.AlarmID request,
+    public void getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription request,
         io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmResponse> responseObserver) {
       io.grpc.stub.ClientCalls.asyncServerStreamingCall(
           getChannel().newCall(getGetAlarmResponseStreamMethod(), getCallOptions()), request, responseObserver);
     }
+
+    /**
+     */
+    public void deleteAlarm(monitoring.Monitoring.AlarmID request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getDeleteAlarmMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getStreamKpi(monitoring.Monitoring.KpiId request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncServerStreamingCall(
+          getChannel().newCall(getGetStreamKpiMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getInstantKpi(monitoring.Monitoring.KpiId request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetInstantKpiMethod(), getCallOptions()), request, responseObserver);
+    }
   }
 
   /**
@@ -1053,16 +1053,9 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public monitoring.Monitoring.KpiId createKpi(monitoring.Monitoring.KpiDescriptor request) {
+    public monitoring.Monitoring.KpiId setKpi(monitoring.Monitoring.KpiDescriptor request) {
       return io.grpc.stub.ClientCalls.blockingUnaryCall(
-          getChannel(), getCreateKpiMethod(), getCallOptions(), request);
-    }
-
-    /**
-     */
-    public context.ContextOuterClass.Empty editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) {
-      return io.grpc.stub.ClientCalls.blockingUnaryCall(
-          getChannel(), getEditKpiDescriptorMethod(), getCallOptions(), request);
+          getChannel(), getSetKpiMethod(), getCallOptions(), request);
     }
 
     /**
@@ -1074,23 +1067,16 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public monitoring.Monitoring.KpiDescriptorList getKpiDescriptorList(context.ContextOuterClass.Empty request) {
-      return io.grpc.stub.ClientCalls.blockingUnaryCall(
-          getChannel(), getGetKpiDescriptorListMethod(), getCallOptions(), request);
-    }
-
-    /**
-     */
-    public monitoring.Monitoring.KpiId createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request) {
+    public monitoring.Monitoring.KpiDescriptor getKpiDescriptor(monitoring.Monitoring.KpiId request) {
       return io.grpc.stub.ClientCalls.blockingUnaryCall(
-          getChannel(), getCreateBundleKpiMethod(), getCallOptions(), request);
+          getChannel(), getGetKpiDescriptorMethod(), getCallOptions(), request);
     }
 
     /**
      */
-    public monitoring.Monitoring.KpiDescriptor getKpiDescriptor(monitoring.Monitoring.KpiId request) {
+    public monitoring.Monitoring.KpiDescriptorList getKpiDescriptorList(context.ContextOuterClass.Empty request) {
       return io.grpc.stub.ClientCalls.blockingUnaryCall(
-          getChannel(), getGetKpiDescriptorMethod(), getCallOptions(), request);
+          getChannel(), getGetKpiDescriptorListMethod(), getCallOptions(), request);
     }
 
     /**
@@ -1116,10 +1102,10 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public java.util.Iterator<monitoring.Monitoring.KpiList> subscribeKpi(
+    public java.util.Iterator<monitoring.Monitoring.KpiList> setKpiSubscription(
         monitoring.Monitoring.SubsDescriptor request) {
       return io.grpc.stub.ClientCalls.blockingServerStreamingCall(
-          getChannel(), getSubscribeKpiMethod(), getCallOptions(), request);
+          getChannel(), getSetKpiSubscriptionMethod(), getCallOptions(), request);
     }
 
     /**
@@ -1138,23 +1124,16 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public context.ContextOuterClass.Empty editKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
+    public context.ContextOuterClass.Empty deleteSubscription(monitoring.Monitoring.SubscriptionID request) {
       return io.grpc.stub.ClientCalls.blockingUnaryCall(
-          getChannel(), getEditKpiSubscriptionMethod(), getCallOptions(), request);
+          getChannel(), getDeleteSubscriptionMethod(), getCallOptions(), request);
     }
 
     /**
      */
-    public monitoring.Monitoring.AlarmID createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+    public monitoring.Monitoring.AlarmID setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
       return io.grpc.stub.ClientCalls.blockingUnaryCall(
-          getChannel(), getCreateKpiAlarmMethod(), getCallOptions(), request);
-    }
-
-    /**
-     */
-    public context.ContextOuterClass.Empty editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
-      return io.grpc.stub.ClientCalls.blockingUnaryCall(
-          getChannel(), getEditKpiAlarmMethod(), getCallOptions(), request);
+          getChannel(), getSetKpiAlarmMethod(), getCallOptions(), request);
     }
 
     /**
@@ -1174,10 +1153,32 @@ public final class MonitoringServiceGrpc {
     /**
      */
     public java.util.Iterator<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(
-        monitoring.Monitoring.AlarmID request) {
+        monitoring.Monitoring.AlarmSubscription request) {
       return io.grpc.stub.ClientCalls.blockingServerStreamingCall(
           getChannel(), getGetAlarmResponseStreamMethod(), getCallOptions(), request);
     }
+
+    /**
+     */
+    public context.ContextOuterClass.Empty deleteAlarm(monitoring.Monitoring.AlarmID request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getDeleteAlarmMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public java.util.Iterator<monitoring.Monitoring.Kpi> getStreamKpi(
+        monitoring.Monitoring.KpiId request) {
+      return io.grpc.stub.ClientCalls.blockingServerStreamingCall(
+          getChannel(), getGetStreamKpiMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public monitoring.Monitoring.KpiList getInstantKpi(monitoring.Monitoring.KpiId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetInstantKpiMethod(), getCallOptions(), request);
+    }
   }
 
   /**
@@ -1196,26 +1197,26 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiId> createKpi(
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiId> setKpi(
         monitoring.Monitoring.KpiDescriptor request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
-          getChannel().newCall(getCreateKpiMethod(), getCallOptions()), request);
+          getChannel().newCall(getSetKpiMethod(), getCallOptions()), request);
     }
 
     /**
      */
-    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> editKpiDescriptor(
-        monitoring.Monitoring.EditedKpiDescriptor request) {
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> deleteKpi(
+        monitoring.Monitoring.KpiId request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
-          getChannel().newCall(getEditKpiDescriptorMethod(), getCallOptions()), request);
+          getChannel().newCall(getDeleteKpiMethod(), getCallOptions()), request);
     }
 
     /**
      */
-    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> deleteKpi(
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(
         monitoring.Monitoring.KpiId request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
-          getChannel().newCall(getDeleteKpiMethod(), getCallOptions()), request);
+          getChannel().newCall(getGetKpiDescriptorMethod(), getCallOptions()), request);
     }
 
     /**
@@ -1226,22 +1227,6 @@ public final class MonitoringServiceGrpc {
           getChannel().newCall(getGetKpiDescriptorListMethod(), getCallOptions()), request);
     }
 
-    /**
-     */
-    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiId> createBundleKpi(
-        monitoring.Monitoring.BundleKpiDescriptor request) {
-      return io.grpc.stub.ClientCalls.futureUnaryCall(
-          getChannel().newCall(getCreateBundleKpiMethod(), getCallOptions()), request);
-    }
-
-    /**
-     */
-    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(
-        monitoring.Monitoring.KpiId request) {
-      return io.grpc.stub.ClientCalls.futureUnaryCall(
-          getChannel().newCall(getGetKpiDescriptorMethod(), getCallOptions()), request);
-    }
-
     /**
      */
     public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> includeKpi(
@@ -1284,26 +1269,18 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> editKpiSubscription(
-        monitoring.Monitoring.SubsDescriptor request) {
-      return io.grpc.stub.ClientCalls.futureUnaryCall(
-          getChannel().newCall(getEditKpiSubscriptionMethod(), getCallOptions()), request);
-    }
-
-    /**
-     */
-    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.AlarmID> createKpiAlarm(
-        monitoring.Monitoring.AlarmDescriptor request) {
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> deleteSubscription(
+        monitoring.Monitoring.SubscriptionID request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
-          getChannel().newCall(getCreateKpiAlarmMethod(), getCallOptions()), request);
+          getChannel().newCall(getDeleteSubscriptionMethod(), getCallOptions()), request);
     }
 
     /**
      */
-    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> editKpiAlarm(
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.AlarmID> setKpiAlarm(
         monitoring.Monitoring.AlarmDescriptor request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
-          getChannel().newCall(getEditKpiAlarmMethod(), getCallOptions()), request);
+          getChannel().newCall(getSetKpiAlarmMethod(), getCallOptions()), request);
     }
 
     /**
@@ -1321,26 +1298,42 @@ public final class MonitoringServiceGrpc {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
           getChannel().newCall(getGetAlarmDescriptorMethod(), getCallOptions()), request);
     }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> deleteAlarm(
+        monitoring.Monitoring.AlarmID request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getDeleteAlarmMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiList> getInstantKpi(
+        monitoring.Monitoring.KpiId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetInstantKpiMethod(), getCallOptions()), request);
+    }
   }
 
-  private static final int METHODID_CREATE_KPI = 0;
-  private static final int METHODID_EDIT_KPI_DESCRIPTOR = 1;
-  private static final int METHODID_DELETE_KPI = 2;
+  private static final int METHODID_SET_KPI = 0;
+  private static final int METHODID_DELETE_KPI = 1;
+  private static final int METHODID_GET_KPI_DESCRIPTOR = 2;
   private static final int METHODID_GET_KPI_DESCRIPTOR_LIST = 3;
-  private static final int METHODID_CREATE_BUNDLE_KPI = 4;
-  private static final int METHODID_GET_KPI_DESCRIPTOR = 5;
-  private static final int METHODID_INCLUDE_KPI = 6;
-  private static final int METHODID_MONITOR_KPI = 7;
-  private static final int METHODID_QUERY_KPI_DATA = 8;
-  private static final int METHODID_SUBSCRIBE_KPI = 9;
-  private static final int METHODID_GET_SUBS_DESCRIPTOR = 10;
-  private static final int METHODID_GET_SUBSCRIPTIONS = 11;
-  private static final int METHODID_EDIT_KPI_SUBSCRIPTION = 12;
-  private static final int METHODID_CREATE_KPI_ALARM = 13;
-  private static final int METHODID_EDIT_KPI_ALARM = 14;
-  private static final int METHODID_GET_ALARMS = 15;
-  private static final int METHODID_GET_ALARM_DESCRIPTOR = 16;
-  private static final int METHODID_GET_ALARM_RESPONSE_STREAM = 17;
+  private static final int METHODID_INCLUDE_KPI = 4;
+  private static final int METHODID_MONITOR_KPI = 5;
+  private static final int METHODID_QUERY_KPI_DATA = 6;
+  private static final int METHODID_SET_KPI_SUBSCRIPTION = 7;
+  private static final int METHODID_GET_SUBS_DESCRIPTOR = 8;
+  private static final int METHODID_GET_SUBSCRIPTIONS = 9;
+  private static final int METHODID_DELETE_SUBSCRIPTION = 10;
+  private static final int METHODID_SET_KPI_ALARM = 11;
+  private static final int METHODID_GET_ALARMS = 12;
+  private static final int METHODID_GET_ALARM_DESCRIPTOR = 13;
+  private static final int METHODID_GET_ALARM_RESPONSE_STREAM = 14;
+  private static final int METHODID_DELETE_ALARM = 15;
+  private static final int METHODID_GET_STREAM_KPI = 16;
+  private static final int METHODID_GET_INSTANT_KPI = 17;
 
   private static final class MethodHandlers<Req, Resp> implements
       io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
@@ -1359,30 +1352,22 @@ public final class MonitoringServiceGrpc {
     @java.lang.SuppressWarnings("unchecked")
     public void invoke(Req request, io.grpc.stub.StreamObserver<Resp> responseObserver) {
       switch (methodId) {
-        case METHODID_CREATE_KPI:
-          serviceImpl.createKpi((monitoring.Monitoring.KpiDescriptor) request,
+        case METHODID_SET_KPI:
+          serviceImpl.setKpi((monitoring.Monitoring.KpiDescriptor) request,
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId>) responseObserver);
           break;
-        case METHODID_EDIT_KPI_DESCRIPTOR:
-          serviceImpl.editKpiDescriptor((monitoring.Monitoring.EditedKpiDescriptor) request,
-              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
-          break;
         case METHODID_DELETE_KPI:
           serviceImpl.deleteKpi((monitoring.Monitoring.KpiId) request,
               (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
           break;
-        case METHODID_GET_KPI_DESCRIPTOR_LIST:
-          serviceImpl.getKpiDescriptorList((context.ContextOuterClass.Empty) request,
-              (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptorList>) responseObserver);
-          break;
-        case METHODID_CREATE_BUNDLE_KPI:
-          serviceImpl.createBundleKpi((monitoring.Monitoring.BundleKpiDescriptor) request,
-              (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId>) responseObserver);
-          break;
         case METHODID_GET_KPI_DESCRIPTOR:
           serviceImpl.getKpiDescriptor((monitoring.Monitoring.KpiId) request,
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor>) responseObserver);
           break;
+        case METHODID_GET_KPI_DESCRIPTOR_LIST:
+          serviceImpl.getKpiDescriptorList((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptorList>) responseObserver);
+          break;
         case METHODID_INCLUDE_KPI:
           serviceImpl.includeKpi((monitoring.Monitoring.Kpi) request,
               (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
@@ -1395,8 +1380,8 @@ public final class MonitoringServiceGrpc {
           serviceImpl.queryKpiData((monitoring.Monitoring.KpiQuery) request,
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList>) responseObserver);
           break;
-        case METHODID_SUBSCRIBE_KPI:
-          serviceImpl.subscribeKpi((monitoring.Monitoring.SubsDescriptor) request,
+        case METHODID_SET_KPI_SUBSCRIPTION:
+          serviceImpl.setKpiSubscription((monitoring.Monitoring.SubsDescriptor) request,
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList>) responseObserver);
           break;
         case METHODID_GET_SUBS_DESCRIPTOR:
@@ -1407,18 +1392,14 @@ public final class MonitoringServiceGrpc {
           serviceImpl.getSubscriptions((context.ContextOuterClass.Empty) request,
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.SubsIDList>) responseObserver);
           break;
-        case METHODID_EDIT_KPI_SUBSCRIPTION:
-          serviceImpl.editKpiSubscription((monitoring.Monitoring.SubsDescriptor) request,
+        case METHODID_DELETE_SUBSCRIPTION:
+          serviceImpl.deleteSubscription((monitoring.Monitoring.SubscriptionID) request,
               (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
           break;
-        case METHODID_CREATE_KPI_ALARM:
-          serviceImpl.createKpiAlarm((monitoring.Monitoring.AlarmDescriptor) request,
+        case METHODID_SET_KPI_ALARM:
+          serviceImpl.setKpiAlarm((monitoring.Monitoring.AlarmDescriptor) request,
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmID>) responseObserver);
           break;
-        case METHODID_EDIT_KPI_ALARM:
-          serviceImpl.editKpiAlarm((monitoring.Monitoring.AlarmDescriptor) request,
-              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
-          break;
         case METHODID_GET_ALARMS:
           serviceImpl.getAlarms((context.ContextOuterClass.Empty) request,
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmIDList>) responseObserver);
@@ -1428,9 +1409,21 @@ public final class MonitoringServiceGrpc {
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmDescriptor>) responseObserver);
           break;
         case METHODID_GET_ALARM_RESPONSE_STREAM:
-          serviceImpl.getAlarmResponseStream((monitoring.Monitoring.AlarmID) request,
+          serviceImpl.getAlarmResponseStream((monitoring.Monitoring.AlarmSubscription) request,
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmResponse>) responseObserver);
           break;
+        case METHODID_DELETE_ALARM:
+          serviceImpl.deleteAlarm((monitoring.Monitoring.AlarmID) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+          break;
+        case METHODID_GET_STREAM_KPI:
+          serviceImpl.getStreamKpi((monitoring.Monitoring.KpiId) request,
+              (io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi>) responseObserver);
+          break;
+        case METHODID_GET_INSTANT_KPI:
+          serviceImpl.getInstantKpi((monitoring.Monitoring.KpiId) request,
+              (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList>) responseObserver);
+          break;
         default:
           throw new AssertionError();
       }
@@ -1492,24 +1485,24 @@ public final class MonitoringServiceGrpc {
         if (result == null) {
           serviceDescriptor = result = io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME)
               .setSchemaDescriptor(new MonitoringServiceFileDescriptorSupplier())
-              .addMethod(getCreateKpiMethod())
-              .addMethod(getEditKpiDescriptorMethod())
+              .addMethod(getSetKpiMethod())
               .addMethod(getDeleteKpiMethod())
-              .addMethod(getGetKpiDescriptorListMethod())
-              .addMethod(getCreateBundleKpiMethod())
               .addMethod(getGetKpiDescriptorMethod())
+              .addMethod(getGetKpiDescriptorListMethod())
               .addMethod(getIncludeKpiMethod())
               .addMethod(getMonitorKpiMethod())
               .addMethod(getQueryKpiDataMethod())
-              .addMethod(getSubscribeKpiMethod())
+              .addMethod(getSetKpiSubscriptionMethod())
               .addMethod(getGetSubsDescriptorMethod())
               .addMethod(getGetSubscriptionsMethod())
-              .addMethod(getEditKpiSubscriptionMethod())
-              .addMethod(getCreateKpiAlarmMethod())
-              .addMethod(getEditKpiAlarmMethod())
+              .addMethod(getDeleteSubscriptionMethod())
+              .addMethod(getSetKpiAlarmMethod())
               .addMethod(getGetAlarmsMethod())
               .addMethod(getGetAlarmDescriptorMethod())
               .addMethod(getGetAlarmResponseStreamMethod())
+              .addMethod(getDeleteAlarmMethod())
+              .addMethod(getGetStreamKpiMethod())
+              .addMethod(getGetInstantKpiMethod())
               .build();
         }
       }
diff --git a/src/automation/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java b/src/automation/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java
index 46f442b743ee176a83a416fe13711beda6baf937..d663b38c923a2b5401642db4e697e16be4720f05 100644
--- a/src/automation/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java
+++ b/src/automation/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java
@@ -36,13 +36,8 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createKpi(monitoring.Monitoring.KpiDescriptor request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::createKpi);
-        }
-
-        
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::editKpiDescriptor);
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> setKpi(monitoring.Monitoring.KpiDescriptor request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::setKpi);
         }
 
         
@@ -51,18 +46,13 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptorList> getKpiDescriptorList(context.ContextOuterClass.Empty request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getKpiDescriptorList);
-        }
-
-        
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::createBundleKpi);
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getKpiDescriptor);
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getKpiDescriptor);
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptorList> getKpiDescriptorList(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getKpiDescriptorList);
         }
 
         
@@ -91,18 +81,13 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::editKpiSubscription);
-        }
-
-        
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::createKpiAlarm);
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteSubscription(monitoring.Monitoring.SubscriptionID request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::deleteSubscription);
         }
 
         
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::editKpiAlarm);
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::setKpiAlarm);
         }
 
         
@@ -116,15 +101,30 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
-        public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> subscribeKpi(monitoring.Monitoring.SubsDescriptor request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::subscribeKpi);
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteAlarm(monitoring.Monitoring.AlarmID request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::deleteAlarm);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> getInstantKpi(monitoring.Monitoring.KpiId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getInstantKpi);
+        }
+
+        
+        public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> setKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::setKpiSubscription);
         }
 
         
-        public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request) {
+        public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription request) {
             return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::getAlarmResponseStream);
         }
 
+        
+        public io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::getStreamKpi);
+        }
+
     }
 
     
@@ -143,17 +143,17 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
 
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createKpi(monitoring.Monitoring.KpiDescriptor request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> setKpi(monitoring.Monitoring.KpiDescriptor request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) {
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
@@ -163,98 +163,98 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request) {
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> monitorKpi(monitoring.Monitoring.MonitorKpiRequest request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> monitorKpi(monitoring.Monitoring.MonitorKpiRequest request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsDescriptor> getSubsDescriptor(monitoring.Monitoring.SubscriptionID request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsIDList> getSubscriptions(context.ContextOuterClass.Empty request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsDescriptor> getSubsDescriptor(monitoring.Monitoring.SubscriptionID request) {
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteSubscription(monitoring.Monitoring.SubscriptionID request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsIDList> getSubscriptions(context.ContextOuterClass.Empty request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmIDList> getAlarms(context.ContextOuterClass.Empty request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(monitoring.Monitoring.AlarmID request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteAlarm(monitoring.Monitoring.AlarmID request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmIDList> getAlarms(context.ContextOuterClass.Empty request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> getInstantKpi(monitoring.Monitoring.KpiId request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(monitoring.Monitoring.AlarmID request) {
+        public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> setKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> subscribeKpi(monitoring.Monitoring.SubsDescriptor request) {
+        public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request) {
+        public io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
             return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
                     .addMethod(
-                            monitoring.MonitoringServiceGrpc.getCreateKpiMethod(),
+                            monitoring.MonitoringServiceGrpc.getSetKpiMethod(),
                             asyncUnaryCall(
                                     new MethodHandlers<
                                             monitoring.Monitoring.KpiDescriptor,
                                             monitoring.Monitoring.KpiId>(
-                                            this, METHODID_CREATE_KPI, compression)))
+                                            this, METHODID_SET_KPI, compression)))
                     .addMethod(
-                            monitoring.MonitoringServiceGrpc.getEditKpiDescriptorMethod(),
+                            monitoring.MonitoringServiceGrpc.getDeleteKpiMethod(),
                             asyncUnaryCall(
                                     new MethodHandlers<
-                                            monitoring.Monitoring.EditedKpiDescriptor,
+                                            monitoring.Monitoring.KpiId,
                                             context.ContextOuterClass.Empty>(
-                                            this, METHODID_EDIT_KPI_DESCRIPTOR, compression)))
+                                            this, METHODID_DELETE_KPI, compression)))
                     .addMethod(
-                            monitoring.MonitoringServiceGrpc.getDeleteKpiMethod(),
+                            monitoring.MonitoringServiceGrpc.getGetKpiDescriptorMethod(),
                             asyncUnaryCall(
                                     new MethodHandlers<
                                             monitoring.Monitoring.KpiId,
-                                            context.ContextOuterClass.Empty>(
-                                            this, METHODID_DELETE_KPI, compression)))
+                                            monitoring.Monitoring.KpiDescriptor>(
+                                            this, METHODID_GET_KPI_DESCRIPTOR, compression)))
                     .addMethod(
                             monitoring.MonitoringServiceGrpc.getGetKpiDescriptorListMethod(),
                             asyncUnaryCall(
@@ -262,20 +262,6 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                                             context.ContextOuterClass.Empty,
                                             monitoring.Monitoring.KpiDescriptorList>(
                                             this, METHODID_GET_KPI_DESCRIPTOR_LIST, compression)))
-                    .addMethod(
-                            monitoring.MonitoringServiceGrpc.getCreateBundleKpiMethod(),
-                            asyncUnaryCall(
-                                    new MethodHandlers<
-                                            monitoring.Monitoring.BundleKpiDescriptor,
-                                            monitoring.Monitoring.KpiId>(
-                                            this, METHODID_CREATE_BUNDLE_KPI, compression)))
-                    .addMethod(
-                            monitoring.MonitoringServiceGrpc.getGetKpiDescriptorMethod(),
-                            asyncUnaryCall(
-                                    new MethodHandlers<
-                                            monitoring.Monitoring.KpiId,
-                                            monitoring.Monitoring.KpiDescriptor>(
-                                            this, METHODID_GET_KPI_DESCRIPTOR, compression)))
                     .addMethod(
                             monitoring.MonitoringServiceGrpc.getIncludeKpiMethod(),
                             asyncUnaryCall(
@@ -298,12 +284,12 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                                             monitoring.Monitoring.KpiList>(
                                             this, METHODID_QUERY_KPI_DATA, compression)))
                     .addMethod(
-                            monitoring.MonitoringServiceGrpc.getSubscribeKpiMethod(),
+                            monitoring.MonitoringServiceGrpc.getSetKpiSubscriptionMethod(),
                             asyncServerStreamingCall(
                                     new MethodHandlers<
                                             monitoring.Monitoring.SubsDescriptor,
                                             monitoring.Monitoring.KpiList>(
-                                            this, METHODID_SUBSCRIBE_KPI, compression)))
+                                            this, METHODID_SET_KPI_SUBSCRIPTION, compression)))
                     .addMethod(
                             monitoring.MonitoringServiceGrpc.getGetSubsDescriptorMethod(),
                             asyncUnaryCall(
@@ -319,26 +305,19 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                                             monitoring.Monitoring.SubsIDList>(
                                             this, METHODID_GET_SUBSCRIPTIONS, compression)))
                     .addMethod(
-                            monitoring.MonitoringServiceGrpc.getEditKpiSubscriptionMethod(),
+                            monitoring.MonitoringServiceGrpc.getDeleteSubscriptionMethod(),
                             asyncUnaryCall(
                                     new MethodHandlers<
-                                            monitoring.Monitoring.SubsDescriptor,
+                                            monitoring.Monitoring.SubscriptionID,
                                             context.ContextOuterClass.Empty>(
-                                            this, METHODID_EDIT_KPI_SUBSCRIPTION, compression)))
+                                            this, METHODID_DELETE_SUBSCRIPTION, compression)))
                     .addMethod(
-                            monitoring.MonitoringServiceGrpc.getCreateKpiAlarmMethod(),
+                            monitoring.MonitoringServiceGrpc.getSetKpiAlarmMethod(),
                             asyncUnaryCall(
                                     new MethodHandlers<
                                             monitoring.Monitoring.AlarmDescriptor,
                                             monitoring.Monitoring.AlarmID>(
-                                            this, METHODID_CREATE_KPI_ALARM, compression)))
-                    .addMethod(
-                            monitoring.MonitoringServiceGrpc.getEditKpiAlarmMethod(),
-                            asyncUnaryCall(
-                                    new MethodHandlers<
-                                            monitoring.Monitoring.AlarmDescriptor,
-                                            context.ContextOuterClass.Empty>(
-                                            this, METHODID_EDIT_KPI_ALARM, compression)))
+                                            this, METHODID_SET_KPI_ALARM, compression)))
                     .addMethod(
                             monitoring.MonitoringServiceGrpc.getGetAlarmsMethod(),
                             asyncUnaryCall(
@@ -357,31 +336,52 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                             monitoring.MonitoringServiceGrpc.getGetAlarmResponseStreamMethod(),
                             asyncServerStreamingCall(
                                     new MethodHandlers<
-                                            monitoring.Monitoring.AlarmID,
+                                            monitoring.Monitoring.AlarmSubscription,
                                             monitoring.Monitoring.AlarmResponse>(
                                             this, METHODID_GET_ALARM_RESPONSE_STREAM, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getDeleteAlarmMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.AlarmID,
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_DELETE_ALARM, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getGetStreamKpiMethod(),
+                            asyncServerStreamingCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.KpiId,
+                                            monitoring.Monitoring.Kpi>(
+                                            this, METHODID_GET_STREAM_KPI, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getGetInstantKpiMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.KpiId,
+                                            monitoring.Monitoring.KpiList>(
+                                            this, METHODID_GET_INSTANT_KPI, compression)))
                     .build();
         }
     }
 
-    private static final int METHODID_CREATE_KPI = 0;
-    private static final int METHODID_EDIT_KPI_DESCRIPTOR = 1;
-    private static final int METHODID_DELETE_KPI = 2;
+    private static final int METHODID_SET_KPI = 0;
+    private static final int METHODID_DELETE_KPI = 1;
+    private static final int METHODID_GET_KPI_DESCRIPTOR = 2;
     private static final int METHODID_GET_KPI_DESCRIPTOR_LIST = 3;
-    private static final int METHODID_CREATE_BUNDLE_KPI = 4;
-    private static final int METHODID_GET_KPI_DESCRIPTOR = 5;
-    private static final int METHODID_INCLUDE_KPI = 6;
-    private static final int METHODID_MONITOR_KPI = 7;
-    private static final int METHODID_QUERY_KPI_DATA = 8;
-    private static final int METHODID_SUBSCRIBE_KPI = 9;
-    private static final int METHODID_GET_SUBS_DESCRIPTOR = 10;
-    private static final int METHODID_GET_SUBSCRIPTIONS = 11;
-    private static final int METHODID_EDIT_KPI_SUBSCRIPTION = 12;
-    private static final int METHODID_CREATE_KPI_ALARM = 13;
-    private static final int METHODID_EDIT_KPI_ALARM = 14;
-    private static final int METHODID_GET_ALARMS = 15;
-    private static final int METHODID_GET_ALARM_DESCRIPTOR = 16;
-    private static final int METHODID_GET_ALARM_RESPONSE_STREAM = 17;
+    private static final int METHODID_INCLUDE_KPI = 4;
+    private static final int METHODID_MONITOR_KPI = 5;
+    private static final int METHODID_QUERY_KPI_DATA = 6;
+    private static final int METHODID_SET_KPI_SUBSCRIPTION = 7;
+    private static final int METHODID_GET_SUBS_DESCRIPTOR = 8;
+    private static final int METHODID_GET_SUBSCRIPTIONS = 9;
+    private static final int METHODID_DELETE_SUBSCRIPTION = 10;
+    private static final int METHODID_SET_KPI_ALARM = 11;
+    private static final int METHODID_GET_ALARMS = 12;
+    private static final int METHODID_GET_ALARM_DESCRIPTOR = 13;
+    private static final int METHODID_GET_ALARM_RESPONSE_STREAM = 14;
+    private static final int METHODID_DELETE_ALARM = 15;
+    private static final int METHODID_GET_STREAM_KPI = 16;
+    private static final int METHODID_GET_INSTANT_KPI = 17;
 
     private static final class MethodHandlers<Req, Resp> implements
             io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
@@ -402,17 +402,11 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
         @java.lang.SuppressWarnings("unchecked")
         public void invoke(Req request, io.grpc.stub.StreamObserver<Resp> responseObserver) {
             switch (methodId) {
-                case METHODID_CREATE_KPI:
+                case METHODID_SET_KPI:
                     io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.KpiDescriptor) request,
                             (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId>) responseObserver,
                             compression,
-                            serviceImpl::createKpi);
-                    break;
-                case METHODID_EDIT_KPI_DESCRIPTOR:
-                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.EditedKpiDescriptor) request,
-                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
-                            compression,
-                            serviceImpl::editKpiDescriptor);
+                            serviceImpl::setKpi);
                     break;
                 case METHODID_DELETE_KPI:
                     io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.KpiId) request,
@@ -420,24 +414,18 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                             compression,
                             serviceImpl::deleteKpi);
                     break;
-                case METHODID_GET_KPI_DESCRIPTOR_LIST:
-                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
-                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptorList>) responseObserver,
-                            compression,
-                            serviceImpl::getKpiDescriptorList);
-                    break;
-                case METHODID_CREATE_BUNDLE_KPI:
-                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.BundleKpiDescriptor) request,
-                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId>) responseObserver,
-                            compression,
-                            serviceImpl::createBundleKpi);
-                    break;
                 case METHODID_GET_KPI_DESCRIPTOR:
                     io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.KpiId) request,
                             (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor>) responseObserver,
                             compression,
                             serviceImpl::getKpiDescriptor);
                     break;
+                case METHODID_GET_KPI_DESCRIPTOR_LIST:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptorList>) responseObserver,
+                            compression,
+                            serviceImpl::getKpiDescriptorList);
+                    break;
                 case METHODID_INCLUDE_KPI:
                     io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.Kpi) request,
                             (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
@@ -456,11 +444,11 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                             compression,
                             serviceImpl::queryKpiData);
                     break;
-                case METHODID_SUBSCRIBE_KPI:
+                case METHODID_SET_KPI_SUBSCRIPTION:
                     io.quarkus.grpc.runtime.ServerCalls.oneToMany((monitoring.Monitoring.SubsDescriptor) request,
                             (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList>) responseObserver,
                             compression,
-                            serviceImpl::subscribeKpi);
+                            serviceImpl::setKpiSubscription);
                     break;
                 case METHODID_GET_SUBS_DESCRIPTOR:
                     io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.SubscriptionID) request,
@@ -474,23 +462,17 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                             compression,
                             serviceImpl::getSubscriptions);
                     break;
-                case METHODID_EDIT_KPI_SUBSCRIPTION:
-                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.SubsDescriptor) request,
+                case METHODID_DELETE_SUBSCRIPTION:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.SubscriptionID) request,
                             (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
                             compression,
-                            serviceImpl::editKpiSubscription);
+                            serviceImpl::deleteSubscription);
                     break;
-                case METHODID_CREATE_KPI_ALARM:
+                case METHODID_SET_KPI_ALARM:
                     io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.AlarmDescriptor) request,
                             (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmID>) responseObserver,
                             compression,
-                            serviceImpl::createKpiAlarm);
-                    break;
-                case METHODID_EDIT_KPI_ALARM:
-                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.AlarmDescriptor) request,
-                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
-                            compression,
-                            serviceImpl::editKpiAlarm);
+                            serviceImpl::setKpiAlarm);
                     break;
                 case METHODID_GET_ALARMS:
                     io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
@@ -505,11 +487,29 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                             serviceImpl::getAlarmDescriptor);
                     break;
                 case METHODID_GET_ALARM_RESPONSE_STREAM:
-                    io.quarkus.grpc.runtime.ServerCalls.oneToMany((monitoring.Monitoring.AlarmID) request,
+                    io.quarkus.grpc.runtime.ServerCalls.oneToMany((monitoring.Monitoring.AlarmSubscription) request,
                             (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmResponse>) responseObserver,
                             compression,
                             serviceImpl::getAlarmResponseStream);
                     break;
+                case METHODID_DELETE_ALARM:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.AlarmID) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
+                            compression,
+                            serviceImpl::deleteAlarm);
+                    break;
+                case METHODID_GET_STREAM_KPI:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToMany((monitoring.Monitoring.KpiId) request,
+                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi>) responseObserver,
+                            compression,
+                            serviceImpl::getStreamKpi);
+                    break;
+                case METHODID_GET_INSTANT_KPI:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.KpiId) request,
+                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList>) responseObserver,
+                            compression,
+                            serviceImpl::getInstantKpi);
+                    break;
                 default:
                     throw new java.lang.AssertionError();
             }
diff --git a/src/automation/target/kubernetes/kubernetes.yml b/src/automation/target/kubernetes/kubernetes.yml
index 321ce20d110da0042b427af531a4473abde0721a..1fc788787ff527647cb920ffa74b270171ab1b6d 100644
--- a/src/automation/target/kubernetes/kubernetes.yml
+++ b/src/automation/target/kubernetes/kubernetes.yml
@@ -3,8 +3,8 @@ apiVersion: v1
 kind: Service
 metadata:
   annotations:
-    app.quarkus.io/commit-id: 70662d960465062d0c21ccce778af4ddb5619bec
-    app.quarkus.io/build-timestamp: 2022-08-01 - 11:18:43 +0000
+    app.quarkus.io/commit-id: 80cfc0874138153f72a2a673fc4d040be707e899
+    app.quarkus.io/build-timestamp: 2022-08-31 - 09:25:37 +0000
   labels:
     app.kubernetes.io/name: automationservice
     app: automationservice
@@ -25,8 +25,8 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   annotations:
-    app.quarkus.io/commit-id: 70662d960465062d0c21ccce778af4ddb5619bec
-    app.quarkus.io/build-timestamp: 2022-08-01 - 11:18:43 +0000
+    app.quarkus.io/commit-id: 80cfc0874138153f72a2a673fc4d040be707e899
+    app.quarkus.io/build-timestamp: 2022-08-31 - 09:25:37 +0000
   labels:
     app: automationservice
     app.kubernetes.io/name: automationservice
@@ -39,8 +39,8 @@ spec:
   template:
     metadata:
       annotations:
-        app.quarkus.io/commit-id: 70662d960465062d0c21ccce778af4ddb5619bec
-        app.quarkus.io/build-timestamp: 2022-08-01 - 11:18:43 +0000
+        app.quarkus.io/commit-id: 80cfc0874138153f72a2a673fc4d040be707e899
+        app.quarkus.io/build-timestamp: 2022-08-31 - 09:25:37 +0000
       labels:
         app: automationservice
         app.kubernetes.io/name: automationservice
diff --git a/src/common/tools/grpc/ConfigRules.py b/src/common/tools/grpc/ConfigRules.py
new file mode 100644
index 0000000000000000000000000000000000000000..e109cb7a00086da8530c7677967d86e57df1457a
--- /dev/null
+++ b/src/common/tools/grpc/ConfigRules.py
@@ -0,0 +1,62 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# RFC 8466 - L2VPN Service Model (L2SM)
+# Ref: https://datatracker.ietf.org/doc/html/rfc8466
+
+
+import json
+from typing import Any, Dict, Tuple
+from common.proto.context_pb2 import ConfigActionEnum, ConfigRule
+from common.tools.grpc.Tools import grpc_message_to_json_string
+
+def update_config_rule_custom(config_rules, resource_key : str, fields : Dict[str, Tuple[Any, bool]]) -> ConfigRule:
+    # fields: Dict[field_name : str, Tuple[field_value : Any, raise_if_differs : bool]]
+
+    for config_rule in config_rules:
+        if config_rule.WhichOneof('config_rule') != 'custom': continue
+        if config_rule.custom.resource_key != resource_key: continue
+        json_resource_value = json.loads(config_rule.custom.resource_value)
+        break   # found, end loop
+    else:
+        # not found, add it
+        config_rule = config_rules.add()    # pylint: disable=no-member
+        config_rule.action = ConfigActionEnum.CONFIGACTION_SET
+        config_rule.custom.resource_key = resource_key
+        json_resource_value = {}
+
+    for field_name,(field_value, raise_if_differs) in fields.items():
+        if (field_name not in json_resource_value) or not raise_if_differs:
+            # missing or raise_if_differs=False, add/update it
+            json_resource_value[field_name] = field_value
+        elif json_resource_value[field_name] != field_value:
+            # exists, differs, and raise_if_differs=True
+            msg = 'Specified {:s}({:s}) differs existing value({:s})'
+            raise Exception(msg.format(str(field_name), str(field_value), str(json_resource_value[field_name])))
+
+    config_rule.custom.resource_value = json.dumps(json_resource_value, sort_keys=True)
+
+def copy_config_rules(source_config_rules, target_config_rules):
+    for source_config_rule in source_config_rules:
+        config_rule_kind = source_config_rule.WhichOneof('config_rule')
+        if config_rule_kind == 'custom':
+            custom = source_config_rule.custom
+            resource_key = custom.resource_key
+            resource_value = json.loads(custom.resource_value)
+            raise_if_differs = True
+            fields = {name:(value, raise_if_differs) for name,value in resource_value.items()}
+            update_config_rule_custom(target_config_rules, resource_key, fields)
+
+        else:
+            raise NotImplementedError('ConfigRule({:s})'.format(grpc_message_to_json_string(source_config_rule)))
diff --git a/src/common/tools/grpc/Constraints.py b/src/common/tools/grpc/Constraints.py
new file mode 100644
index 0000000000000000000000000000000000000000..a9dd4f40cbd823752b8cc09936ac48ebe32ec1a5
--- /dev/null
+++ b/src/common/tools/grpc/Constraints.py
@@ -0,0 +1,164 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# RFC 8466 - L2VPN Service Model (L2SM)
+# Ref: https://datatracker.ietf.org/doc/html/rfc8466
+
+
+import json
+from typing import Any, Dict, Optional, Tuple
+from common.proto.context_pb2 import Constraint, EndPointId
+from common.tools.grpc.Tools import grpc_message_to_json_string
+
+def update_constraint_custom(constraints, constraint_type : str, fields : Dict[str, Tuple[Any, bool]]) -> Constraint:
+    # fields: Dict[field_name : str, Tuple[field_value : Any, raise_if_differs : bool]]
+
+    for constraint in constraints:
+        if constraint.WhichOneof('constraint') != 'custom': continue
+        if constraint.custom.constraint_type != constraint_type: continue
+        json_constraint_value = json.loads(constraint.custom.constraint_value)
+        break   # found, end loop
+    else:
+        # not found, add it
+        constraint = constraints.add()      # pylint: disable=no-member
+        constraint.custom.constraint_type = constraint_type
+        json_constraint_value = {}
+
+    for field_name,(field_value, raise_if_differs) in fields.items():
+        if (field_name not in json_constraint_value) or not raise_if_differs:
+            # missing or raise_if_differs=False, add/update it
+            json_constraint_value[field_name] = field_value
+        elif json_constraint_value[field_name] != field_value:
+            # exists, differs, and raise_if_differs=True
+            msg = 'Specified {:s}({:s}) differs existing value({:s})'
+            raise Exception(msg.format(str(field_name), str(field_value), str(json_constraint_value[field_name])))
+
+    constraint.custom.constraint_value = json.dumps(json_constraint_value, sort_keys=True)
+
+def update_constraint_endpoint_location(
+    constraints, endpoint_id : EndPointId,
+    region : Optional[str] = None, gps_position : Optional[Tuple[float, float]] = None
+) -> Constraint:
+    # gps_position: (latitude, longitude)
+    if region is not None and gps_position is not None:
+        raise Exception('Only one of region/gps_position can be provided')
+
+    endpoint_uuid = endpoint_id.endpoint_uuid.uuid
+    device_uuid = endpoint_id.device_id.device_uuid.uuid
+    topology_uuid = endpoint_id.topology_id.topology_uuid.uuid
+    context_uuid = endpoint_id.topology_id.context_id.context_uuid.uuid
+
+    for constraint in constraints:
+        if constraint.WhichOneof('constraint') != 'endpoint_location': continue
+        _endpoint_id = constraint.endpoint_location.endpoint_id
+        if _endpoint_id.endpoint_uuid.uuid != endpoint_uuid: continue
+        if _endpoint_id.device_id.device_uuid.uuid != device_uuid: continue
+        if _endpoint_id.topology_id.topology_uuid.uuid != topology_uuid: continue
+        if _endpoint_id.topology_id.context_id.context_uuid.uuid != context_uuid: continue
+        break   # found, end loop
+    else:
+        # not found, add it
+        constraint = constraints.add()      # pylint: disable=no-member
+        _endpoint_id = constraint.endpoint_location.endpoint_id
+        _endpoint_id.endpoint_uuid.uuid = endpoint_uuid
+        _endpoint_id.device_id.device_uuid.uuid = device_uuid
+        _endpoint_id.topology_id.topology_uuid.uuid = topology_uuid
+        _endpoint_id.topology_id.context_id.context_uuid.uuid = context_uuid
+
+    location = constraint.endpoint_location.location
+    if region is not None:
+        location.region = region
+    elif gps_position is not None:
+        location.gps_position.latitude = gps_position[0]
+        location.gps_position.longitude = gps_position[1]
+    return constraint
+
+def update_constraint_endpoint_priority(constraints, endpoint_id : EndPointId, priority : int) -> Constraint:
+    endpoint_uuid = endpoint_id.endpoint_uuid.uuid
+    device_uuid = endpoint_id.device_id.device_uuid.uuid
+    topology_uuid = endpoint_id.topology_id.topology_uuid.uuid
+    context_uuid = endpoint_id.topology_id.context_id.context_uuid.uuid
+
+    for constraint in constraints:
+        if constraint.WhichOneof('constraint') != 'endpoint_priority': continue
+        _endpoint_id = constraint.endpoint_priority.endpoint_id
+        if _endpoint_id.endpoint_uuid.uuid != endpoint_uuid: continue
+        if _endpoint_id.device_id.device_uuid.uuid != device_uuid: continue
+        if _endpoint_id.topology_id.topology_uuid.uuid != topology_uuid: continue
+        if _endpoint_id.topology_id.context_id.context_uuid.uuid != context_uuid: continue
+        break   # found, end loop
+    else:
+        # not found, add it
+        constraint = constraints.add()      # pylint: disable=no-member
+        _endpoint_id = constraint.endpoint_priority.endpoint_id
+        _endpoint_id.endpoint_uuid.uuid = endpoint_uuid
+        _endpoint_id.device_id.device_uuid.uuid = device_uuid
+        _endpoint_id.topology_id.topology_uuid.uuid = topology_uuid
+        _endpoint_id.topology_id.context_id.context_uuid.uuid = context_uuid
+
+    constraint.endpoint_priority.priority = priority
+    return constraint
+
+def update_constraint_sla_availability(constraints, num_disjoint_paths : int, all_active : bool) -> Constraint:
+    for constraint in constraints:
+        if constraint.WhichOneof('constraint') != 'sla_availability': continue
+        break   # found, end loop
+    else:
+        # not found, add it
+        constraint = constraints.add()      # pylint: disable=no-member
+
+    constraint.sla_availability.num_disjoint_paths = num_disjoint_paths
+    constraint.sla_availability.all_active = all_active
+    return constraint
+
+
+def copy_constraints(source_constraints, target_constraints):
+    for source_constraint in source_constraints:
+        constraint_kind = source_constraint.WhichOneof('constraint')
+        if constraint_kind == 'custom':
+            custom = source_constraint.custom
+            constraint_type = custom.constraint_type
+            constraint_value = json.loads(custom.constraint_value)
+            raise_if_differs = True
+            fields = {name:(value, raise_if_differs) for name,value in constraint_value.items()}
+            update_constraint_custom(target_constraints, constraint_type, fields)
+
+        elif constraint_kind == 'endpoint_location':
+            endpoint_id = source_constraint.endpoint_location.endpoint_id
+            location = source_constraint.endpoint_location.location
+            location_kind = location.WhichOneof('location')
+            if location_kind == 'region':
+                region = location.region
+                update_constraint_endpoint_location(target_constraints, endpoint_id, region=region)
+            elif location_kind == 'gps_position':
+                gps_position = location.gps_position
+                gps_position = (gps_position.latitude, gps_position.longitude)
+                update_constraint_endpoint_location(target_constraints, endpoint_id, gps_position=gps_position)
+            else:
+                str_constraint = grpc_message_to_json_string(source_constraint)
+                raise NotImplementedError('Constraint({:s}): Location({:s})'.format(str_constraint, constraint_kind))
+
+        elif constraint_kind == 'endpoint_priority':
+            endpoint_id = source_constraint.endpoint_priority.endpoint_id
+            priority = source_constraint.endpoint_priority.priority
+            update_constraint_endpoint_priority(target_constraints, endpoint_id, priority)
+
+        elif constraint_kind == 'sla_availability':
+            sla_availability = source_constraint.sla_availability
+            num_disjoint_paths = sla_availability.num_disjoint_paths
+            all_active = sla_availability.all_active
+            update_constraint_sla_availability(target_constraints, num_disjoint_paths, all_active)
+
+        else:
+            raise NotImplementedError('Constraint({:s})'.format(grpc_message_to_json_string(source_constraint)))
diff --git a/src/common/tools/grpc/EndPointIds.py b/src/common/tools/grpc/EndPointIds.py
new file mode 100644
index 0000000000000000000000000000000000000000..b3830d4c809bb6dc065e58bc8af0f1ad56c610f4
--- /dev/null
+++ b/src/common/tools/grpc/EndPointIds.py
@@ -0,0 +1,50 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# RFC 8466 - L2VPN Service Model (L2SM)
+# Ref: https://datatracker.ietf.org/doc/html/rfc8466
+
+
+from typing import Optional
+from common.proto.context_pb2 import EndPointId
+
+def update_endpoint_ids(
+    endpoint_ids, device_uuid : str, endpoint_uuid : str,
+    context_uuid : Optional[str] = None, topology_uuid : Optional[str] = None
+) -> EndPointId:
+    for endpoint_id in endpoint_ids:
+        if endpoint_id.endpoint_uuid.uuid != endpoint_uuid: continue
+        if endpoint_id.device_id.device_uuid.uuid != device_uuid: continue
+        topology_id = endpoint_id.topology_id
+        if topology_uuid is not None and topology_id.topology_uuid.uuid != topology_uuid: continue
+        if context_uuid is not None and topology_id.context_id.context_uuid.uuid != context_uuid: continue
+        break   # found, do nothing
+    else:
+        # not found, add it
+        endpoint_id = endpoint_ids.add()    # pylint: disable=no-member
+        endpoint_id.endpoint_uuid.uuid = endpoint_uuid
+        endpoint_id.device_id.device_uuid.uuid = device_uuid
+        if topology_uuid is not None: endpoint_id.topology_id.topology_uuid.uuid = topology_uuid
+        if context_uuid is not None: endpoint_id.topology_id.context_id.context_uuid.uuid = context_uuid
+    return endpoint_id
+
+def copy_endpoint_ids(source_endpoint_ids, target_endpoint_ids):
+    for source_endpoint_id in source_endpoint_ids:
+        device_uuid = source_endpoint_id.device_id.device_uuid.uuid
+        endpoint_uuid = source_endpoint_id.endpoint_uuid.uuid
+        source_topology_id = source_endpoint_id.topology_id
+        context_uuid = source_topology_id.context_id.context_uuid.uuid
+        topology_uuid = source_topology_id.topology_uuid.uuid
+        update_endpoint_ids(
+            target_endpoint_ids, device_uuid, endpoint_uuid, context_uuid=context_uuid, topology_uuid=topology_uuid)
diff --git a/src/common/tools/grpc/ServiceIds.py b/src/common/tools/grpc/ServiceIds.py
new file mode 100644
index 0000000000000000000000000000000000000000..0e1073cab7c4e82e0f21584f2831d94a0b8a23ba
--- /dev/null
+++ b/src/common/tools/grpc/ServiceIds.py
@@ -0,0 +1,37 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# RFC 8466 - L2VPN Service Model (L2SM)
+# Ref: https://datatracker.ietf.org/doc/html/rfc8466
+
+
+from common.proto.context_pb2 import ServiceId
+
+def update_service_ids(service_ids, context_uuid : str, service_uuid : str) -> ServiceId:
+    for service_id in service_ids:
+        if service_id.service_uuid.uuid != service_uuid: continue
+        if service_id.context_id.context_uuid.uuid != context_uuid: continue
+        break   # found, do nothing
+    else:
+        # not found, add it
+        service_id = service_ids.add()    # pylint: disable=no-member
+        service_id.service_uuid.uuid = service_uuid
+        service_id.context_id.context_uuid.uuid = context_uuid
+    return service_id
+
+def copy_service_ids(source_service_ids, target_service_ids):
+    for source_service_id in source_service_ids:
+        context_uuid = source_service_id.context_id.context_uuid.uuid
+        service_uuid = source_service_id.service_uuid.uuid
+        update_service_ids(target_service_ids, context_uuid, service_uuid)
diff --git a/src/common/tools/object_factory/Link.py b/src/common/tools/object_factory/Link.py
index 13973566ece5e6f83312c9bd50ca0c4add2d262b..922a39dbe24f4f4b635f378180ab13c80322801b 100644
--- a/src/common/tools/object_factory/Link.py
+++ b/src/common/tools/object_factory/Link.py
@@ -18,7 +18,7 @@ from typing import Dict, List
 def get_link_uuid(a_endpoint_id : Dict, z_endpoint_id : Dict) -> str:
     return '{:s}/{:s}=={:s}/{:s}'.format(
         a_endpoint_id['device_id']['device_uuid']['uuid'], a_endpoint_id['endpoint_uuid']['uuid'],
-        a_endpoint_id['device_id']['device_uuid']['uuid'], z_endpoint_id['endpoint_uuid']['uuid'])
+        z_endpoint_id['device_id']['device_uuid']['uuid'], z_endpoint_id['endpoint_uuid']['uuid'])
 
 def json_link_id(link_uuid : str):
     return {'link_uuid': {'uuid': link_uuid}}
diff --git a/src/common/tools/object_factory/Service.py b/src/common/tools/object_factory/Service.py
index f0f49210ec067267984dede6f28d7adad8009261..51f75e6dbe5e430330e697da772d65703f7568c7 100644
--- a/src/common/tools/object_factory/Service.py
+++ b/src/common/tools/object_factory/Service.py
@@ -21,7 +21,7 @@ from common.tools.object_factory.Context import json_context_id
 def get_service_uuid(a_endpoint_id : Dict, z_endpoint_id : Dict) -> str:
     return 'svc:{:s}/{:s}=={:s}/{:s}'.format(
         a_endpoint_id['device_id']['device_uuid']['uuid'], a_endpoint_id['endpoint_uuid']['uuid'],
-        a_endpoint_id['device_id']['device_uuid']['uuid'], z_endpoint_id['endpoint_uuid']['uuid'])
+        z_endpoint_id['device_id']['device_uuid']['uuid'], z_endpoint_id['endpoint_uuid']['uuid'])
 
 def json_service_id(service_uuid : str, context_id : Optional[Dict] = None):
     result = {'service_uuid': {'uuid': service_uuid}}
diff --git a/src/monitoring/Config.py b/src/common/tools/timestamp/Converters.py
similarity index 56%
rename from src/monitoring/Config.py
rename to src/common/tools/timestamp/Converters.py
index cbae00509d8196b69bc2d6bacb39bfa5918be495..46a1bcb01a83f1ff4fc2d54cd8fb606dbe7f2bcc 100644
--- a/src/monitoring/Config.py
+++ b/src/common/tools/timestamp/Converters.py
@@ -12,29 +12,15 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import logging
-
-# General settings
-LOG_LEVEL = logging.WARNING
-
-# gRPC settings
-GRPC_SERVICE_PORT = 7070
-GRPC_MAX_WORKERS  = 10
-GRPC_GRACE_PERIOD = 60
-GRPC_SERVICE_HOST = '127.0.0.1'
-
-# Prometheus settings
-METRICS_PORT = 9192
-
-# Dependency micro-service connection settings
-CONTEXT_SERVICE_HOST = '127.0.0.1'
-CONTEXT_GRPC_SERVICE_PORT = 1010
-
-DEVICE_SERVICE_HOST         = '127.0.0.1'
-DEVICE_GRPC_SERVICE_PORT    = 2020
-DEVICE_GRPC_MAX_WORKERS     = 10
-DEVICE_GRPC_GRACE_PERIOD    = 60
 
+import dateutil.parser
+from datetime import datetime, timezone
 
+def timestamp_string_to_float(str_timestamp : str) -> float:
+    return datetime.timestamp(dateutil.parser.isoparse(str_timestamp))
 
+def timestamp_float_to_string(flt_timestamp : float) -> str:
+    return datetime.utcfromtimestamp(flt_timestamp).isoformat() + 'Z'
 
+def timestamp_utcnow_to_float() -> float:
+    return datetime.timestamp(datetime.now(tz=timezone.utc))
diff --git a/src/common/tools/timestamp/__init__.py b/src/common/tools/timestamp/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..70a33251242c51f49140e596b8208a19dd5245f7
--- /dev/null
+++ b/src/common/tools/timestamp/__init__.py
@@ -0,0 +1,14 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
diff --git a/src/context/service/database/ConfigModel.py b/src/context/service/database/ConfigModel.py
index e36fc58cfa2a42425004f6c9766457c5d1c53896..bb2a37467ce3ad451bd29f824a5092ec1ad43cee 100644
--- a/src/context/service/database/ConfigModel.py
+++ b/src/context/service/database/ConfigModel.py
@@ -41,6 +41,11 @@ grpc_to_enum__config_action = functools.partial(
 class ConfigModel(Model): # pylint: disable=abstract-method
     pk = PrimaryKeyField()
 
+    def delete(self) -> None:
+        db_config_rule_pks = self.references(ConfigRuleModel)
+        for pk,_ in db_config_rule_pks: ConfigRuleModel(self.database, pk).delete()
+        super().delete()
+
     def dump(self) -> List[Dict]:
         db_config_rule_pks = self.references(ConfigRuleModel)
         config_rules = [ConfigRuleModel(self.database, pk).dump(include_position=True) for pk,_ in db_config_rule_pks]
diff --git a/src/context/service/database/ConnectionModel.py b/src/context/service/database/ConnectionModel.py
index 1d3f093727fc59b06b13e9f39636bbd9da3b010a..4cbed43a40f3538633216f09060f8a2483fe5e1f 100644
--- a/src/context/service/database/ConnectionModel.py
+++ b/src/context/service/database/ConnectionModel.py
@@ -32,6 +32,11 @@ LOGGER = logging.getLogger(__name__)
 class PathModel(Model): # pylint: disable=abstract-method
     pk = PrimaryKeyField()
 
+    def delete(self) -> None:
+        for db_path_hop_pk,_ in self.references(PathHopModel):
+            PathHopModel(self.database, db_path_hop_pk).delete()
+        super().delete()
+
     def dump(self) -> List[Dict]:
         db_path_hop_pks = self.references(PathHopModel)
         path_hops = [PathHopModel(self.database, pk).dump(include_position=True) for pk,_ in db_path_hop_pks]
@@ -56,6 +61,18 @@ class ConnectionModel(Model):
     service_fk = ForeignKeyField(ServiceModel, required=False)
     path_fk = ForeignKeyField(PathModel, required=True)
 
+    def delete(self) -> None:
+        # pylint: disable=import-outside-toplevel
+        from .RelationModels import ConnectionSubServiceModel
+
+        # Do not remove sub-services automatically. They are supported by real services, so Service component should
+        # deal with the correct removal workflow to deconfigure the devices.
+        for db_connection_sub_service_pk,_ in self.references(ConnectionSubServiceModel):
+            ConnectionSubServiceModel(self.database, db_connection_sub_service_pk).delete()
+
+        super().delete()
+        PathModel(self.database, self.path_fk).delete()
+
     def dump_id(self) -> Dict:
         return {
             'connection_uuid': {'uuid': self.connection_uuid},
@@ -108,7 +125,7 @@ def set_path(
 
     str_path_key = connection_uuid if len(path_name) == 0 else key_to_str([connection_uuid, path_name], separator=':')
     result : Tuple[PathModel, bool] = get_or_create_object(database, PathModel, str_path_key)
-    db_path, created = result
+    db_path, created = result # pylint: disable=unused-variable
 
     db_path_hop_pks : Set[str] = set(map(operator.itemgetter(0), db_path.references(PathHopModel)))
     db_objects : List[Tuple[Union[PathModel, PathHopModel], bool]] = [db_path]
@@ -127,7 +144,7 @@ def set_path(
         db_endpoint : EndPointModel = get_object(database, EndPointModel, str_endpoint_key)
 
         result : Tuple[PathHopModel, bool] = set_path_hop(database, db_path, position, db_endpoint)
-        db_path_hop, updated = result
+        db_path_hop, updated = result # pylint: disable=unused-variable
         db_objects.append(db_path_hop)
         db_path_hop_pks.discard(db_path_hop.instance_key)
 
diff --git a/src/context/service/database/ConstraintModel.py b/src/context/service/database/ConstraintModel.py
index 4eca404ca32b0c88136c5c89fed379919c60a33d..a35ec250d8a62a8a2534e9f27ddecac801db6eff 100644
--- a/src/context/service/database/ConstraintModel.py
+++ b/src/context/service/database/ConstraintModel.py
@@ -13,10 +13,14 @@
 # limitations under the License.
 
 import logging, operator
-from typing import Dict, List, Tuple, Union
+from enum import Enum
+from typing import Dict, List, Optional, Tuple, Type, Union
 from common.orm.Database import Database
-from common.orm.HighLevel import get_or_create_object, update_or_create_object
+from common.orm.HighLevel import get_object, get_or_create_object, update_or_create_object
 from common.orm.backend.Tools import key_to_str
+from common.orm.fields.BooleanField import BooleanField
+from common.orm.fields.EnumeratedField import EnumeratedField
+from common.orm.fields.FloatField import FloatField
 from common.orm.fields.ForeignKeyField import ForeignKeyField
 from common.orm.fields.IntegerField import IntegerField
 from common.orm.fields.PrimaryKeyField import PrimaryKeyField
@@ -24,55 +28,213 @@ from common.orm.fields.StringField import StringField
 from common.orm.model.Model import Model
 from common.proto.context_pb2 import Constraint
 from common.tools.grpc.Tools import grpc_message_to_json_string
-from context.service.database.Tools import fast_hasher, remove_dict_key
+from .EndPointModel import EndPointModel, get_endpoint
+from .Tools import fast_hasher, remove_dict_key
 
 LOGGER = logging.getLogger(__name__)
 
 class ConstraintsModel(Model): # pylint: disable=abstract-method
     pk = PrimaryKeyField()
 
+    def delete(self) -> None:
+        db_constraint_pks = self.references(ConstraintModel)
+        for pk,_ in db_constraint_pks: ConstraintModel(self.database, pk).delete()
+        super().delete()
+
     def dump(self) -> List[Dict]:
         db_constraint_pks = self.references(ConstraintModel)
         constraints = [ConstraintModel(self.database, pk).dump(include_position=True) for pk,_ in db_constraint_pks]
         constraints = sorted(constraints, key=operator.itemgetter('position'))
         return [remove_dict_key(constraint, 'position') for constraint in constraints]
 
+class ConstraintCustomModel(Model): # pylint: disable=abstract-method
+    constraint_type = StringField(required=True, allow_empty=False)
+    constraint_value = StringField(required=True, allow_empty=False)
+
+    def dump(self) -> Dict: # pylint: disable=arguments-differ
+        return {'custom': {'constraint_type': self.constraint_type, 'constraint_value': self.constraint_value}}
+
+Union_ConstraintEndpoint = Union[
+    'ConstraintEndpointLocationGpsPositionModel', 'ConstraintEndpointLocationRegionModel',
+    'ConstraintEndpointPriorityModel'
+]
+def dump_endpoint_id(endpoint_constraint : Union_ConstraintEndpoint):
+    db_endpoints_pks = list(endpoint_constraint.references(EndPointModel))
+    num_endpoints = len(db_endpoints_pks)
+    if num_endpoints != 1:
+        raise Exception('Wrong number({:d}) of associated Endpoints with constraint'.format(num_endpoints))
+    db_endpoint = EndPointModel(endpoint_constraint.database, db_endpoints_pks[0])
+    return db_endpoint.dump_id()
+
+class ConstraintEndpointLocationRegionModel(Model): # pylint: disable=abstract-method
+    endpoint_fk = ForeignKeyField(EndPointModel)
+    region = StringField(required=True, allow_empty=False)
+
+    def dump(self) -> Dict: # pylint: disable=arguments-differ
+        return {'endpoint_location': {'endpoint_id': dump_endpoint_id(self), 'region': self.region}}
+
+class ConstraintEndpointLocationGpsPositionModel(Model): # pylint: disable=abstract-method
+    endpoint_fk = ForeignKeyField(EndPointModel)
+    latitude = FloatField(required=True, min_value=-90.0, max_value=90.0)
+    longitude = FloatField(required=True, min_value=-180.0, max_value=180.0)
+
+    def dump(self) -> Dict: # pylint: disable=arguments-differ
+        gps_position = {'latitude': self.latitude, 'longitude': self.longitude}
+        return {'endpoint_location': {'endpoint_id': dump_endpoint_id(self), 'gps_position': gps_position}}
+
+class ConstraintEndpointPriorityModel(Model): # pylint: disable=abstract-method
+    endpoint_fk = ForeignKeyField(EndPointModel)
+    priority = FloatField(required=True)
+
+    def dump(self) -> Dict: # pylint: disable=arguments-differ
+        return {'endpoint_priority': {'endpoint_id': dump_endpoint_id(self), 'priority': self.priority}}
+
+class ConstraintSlaAvailabilityModel(Model): # pylint: disable=abstract-method
+    num_disjoint_paths = IntegerField(required=True, min_value=1)
+    all_active = BooleanField(required=True)
+
+    def dump(self) -> Dict: # pylint: disable=arguments-differ
+        return {'sla_availability': {'num_disjoint_paths': self.num_disjoint_paths, 'all_active': self.all_active}}
+
+# enum values should match name of field in ConstraintModel
+class ConstraintKindEnum(Enum):
+    CUSTOM                        = 'custom'
+    ENDPOINT_LOCATION_REGION      = 'ep_loc_region'
+    ENDPOINT_LOCATION_GPSPOSITION = 'ep_loc_gpspos'
+    ENDPOINT_PRIORITY             = 'ep_priority'
+    SLA_AVAILABILITY              = 'sla_avail'
+
+Union_SpecificConstraint = Union[
+    ConstraintCustomModel, ConstraintEndpointLocationRegionModel, ConstraintEndpointLocationGpsPositionModel,
+    ConstraintEndpointPriorityModel, ConstraintSlaAvailabilityModel,
+]
+
 class ConstraintModel(Model): # pylint: disable=abstract-method
     pk = PrimaryKeyField()
     constraints_fk = ForeignKeyField(ConstraintsModel)
+    kind = EnumeratedField(ConstraintKindEnum)
     position = IntegerField(min_value=0, required=True)
-    constraint_type = StringField(required=True, allow_empty=False)
-    constraint_value = StringField(required=True, allow_empty=False)
+    constraint_custom_fk        = ForeignKeyField(ConstraintCustomModel, required=False)
+    constraint_ep_loc_region_fk = ForeignKeyField(ConstraintEndpointLocationRegionModel, required=False)
+    constraint_ep_loc_gpspos_fk = ForeignKeyField(ConstraintEndpointLocationGpsPositionModel, required=False)
+    constraint_ep_priority_fk   = ForeignKeyField(ConstraintEndpointPriorityModel, required=False)
+    constraint_sla_avail_fk     = ForeignKeyField(ConstraintSlaAvailabilityModel, required=False)
+
+    def delete(self) -> None:
+        field_name = 'constraint_{:s}_fk'.format(str(self.kind.value))
+        specific_fk_value : Optional[ForeignKeyField] = getattr(self, field_name, None)
+        if specific_fk_value is None:
+            raise Exception('Unable to find constraint key for field_name({:s})'.format(field_name))
+        specific_fk_class = getattr(ConstraintModel, field_name, None)
+        foreign_model_class : Model = specific_fk_class.foreign_model
+        super().delete()
+        get_object(self.database, foreign_model_class, str(specific_fk_value)).delete()
 
     def dump(self, include_position=True) -> Dict: # pylint: disable=arguments-differ
-        result = {
-            'custom': {
-                'constraint_type': self.constraint_type,
-                'constraint_value': self.constraint_value,
-            },
-        }
+        field_name = 'constraint_{:s}_fk'.format(str(self.kind.value))
+        specific_fk_value : Optional[ForeignKeyField] = getattr(self, field_name, None)
+        if specific_fk_value is None:
+            raise Exception('Unable to find constraint key for field_name({:s})'.format(field_name))
+        specific_fk_class = getattr(ConstraintModel, field_name, None)
+        foreign_model_class : Model = specific_fk_class.foreign_model
+        constraint : Union_SpecificConstraint = get_object(self.database, foreign_model_class, str(specific_fk_value))
+        result = constraint.dump()
         if include_position: result['position'] = self.position
         return result
 
+Tuple_ConstraintSpecs = Tuple[Type, str, Dict, ConstraintKindEnum]
+def parse_constraint_custom(database : Database, grpc_constraint) -> Tuple_ConstraintSpecs:
+    constraint_class = ConstraintCustomModel
+    str_constraint_id = grpc_constraint.custom.constraint_type
+    constraint_data = {
+        'constraint_type' : grpc_constraint.custom.constraint_type,
+        'constraint_value': grpc_constraint.custom.constraint_value,
+    }
+    return constraint_class, str_constraint_id, constraint_data, ConstraintKindEnum.CUSTOM
+
+def parse_constraint_endpoint_location(database : Database, grpc_constraint) -> Tuple_ConstraintSpecs:
+    grpc_endpoint_id = grpc_constraint.endpoint_location.endpoint_id
+    str_endpoint_key, db_endpoint = get_endpoint(database, grpc_endpoint_id)
+
+    str_constraint_id = str_endpoint_key
+    constraint_data = {'endpoint_fk': db_endpoint}
+
+    grpc_location = grpc_constraint.endpoint_location.location
+    location_kind = str(grpc_location.WhichOneof('location'))
+    if location_kind == 'region':
+        constraint_class = ConstraintEndpointLocationRegionModel
+        constraint_data.update({'region': grpc_location.region})
+        return constraint_class, str_constraint_id, constraint_data, ConstraintKindEnum.ENDPOINT_LOCATION_REGION
+    elif location_kind == 'gps_position':
+        constraint_class = ConstraintEndpointLocationGpsPositionModel
+        gps_position = grpc_location.gps_position
+        constraint_data.update({'latitude': gps_position.latitude, 'longitude': gps_position.longitude})
+        return constraint_class, str_constraint_id, constraint_data, ConstraintKindEnum.ENDPOINT_LOCATION_GPSPOSITION
+    else:
+        MSG = 'Location kind {:s} in Constraint of kind endpoint_location is not implemented: {:s}'
+        raise NotImplementedError(MSG.format(location_kind, grpc_message_to_json_string(grpc_constraint)))
+
+def parse_constraint_endpoint_priority(database : Database, grpc_constraint) -> Tuple_ConstraintSpecs:
+    grpc_endpoint_id = grpc_constraint.endpoint_priority.endpoint_id
+    str_endpoint_key, db_endpoint = get_endpoint(database, grpc_endpoint_id)
+
+    constraint_class = ConstraintEndpointPriorityModel
+    str_constraint_id = str_endpoint_key
+    priority = grpc_constraint.endpoint_priority.priority
+    constraint_data = {'endpoint_fk': db_endpoint, 'priority': priority}
+
+    return constraint_class, str_constraint_id, constraint_data, ConstraintKindEnum.ENDPOINT_PRIORITY
+
+def parse_constraint_sla_availability(database : Database, grpc_constraint) -> Tuple_ConstraintSpecs:
+    constraint_class = ConstraintSlaAvailabilityModel
+    str_constraint_id = ''
+    constraint_data = {
+        'num_disjoint_paths' : grpc_constraint.sla_availability.num_disjoint_paths,
+        'all_active': grpc_constraint.sla_availability.all_active,
+    }
+    return constraint_class, str_constraint_id, constraint_data, ConstraintKindEnum.SLA_AVAILABILITY
+
+CONSTRAINT_PARSERS = {
+    'custom'            : parse_constraint_custom,
+    'endpoint_location' : parse_constraint_endpoint_location,
+    'endpoint_priority' : parse_constraint_endpoint_priority,
+    'sla_availability'  : parse_constraint_sla_availability,
+}
+
+Union_ConstraintModel = Union[
+    ConstraintCustomModel, ConstraintEndpointLocationGpsPositionModel, ConstraintEndpointLocationRegionModel,
+    ConstraintEndpointPriorityModel, ConstraintSlaAvailabilityModel
+]
+
 def set_constraint(
-    database : Database, db_constraints : ConstraintsModel, grpc_constraint, position : int
-) -> Tuple[Constraint, bool]:
-    constraint_type = str(grpc_constraint.WhichOneof('constraint'))
-    if constraint_type != 'custom':
-        raise NotImplementedError('Constraint of type {:s} is not implemented: {:s}'.format(
-            constraint_type, grpc_message_to_json_string(grpc_constraint)))
-
-    str_constraint_key_hash = fast_hasher(grpc_constraint.custom.constraint_type)
+    database : Database, db_constraints : ConstraintsModel, grpc_constraint : Constraint, position : int
+) -> Tuple[Union_ConstraintModel, bool]:
+    grpc_constraint_kind = str(grpc_constraint.WhichOneof('constraint'))
+
+    parser = CONSTRAINT_PARSERS.get(grpc_constraint_kind)
+    if parser is None:
+        raise NotImplementedError('Constraint of kind {:s} is not implemented: {:s}'.format(
+            grpc_constraint_kind, grpc_message_to_json_string(grpc_constraint)))
+
+    # create specific constraint
+    constraint_class, str_constraint_id, constraint_data, constraint_kind = parser(database, grpc_constraint)
+    str_constraint_key_hash = fast_hasher(':'.join([constraint_kind.value, str_constraint_id]))
     str_constraint_key = key_to_str([db_constraints.pk, str_constraint_key_hash], separator=':')
+    result : Tuple[Union_ConstraintModel, bool] = update_or_create_object(
+        database, constraint_class, str_constraint_key, constraint_data)
+    db_specific_constraint, updated = result
 
-    result : Tuple[ConstraintModel, bool] = update_or_create_object(database, ConstraintModel, str_constraint_key, {
-        'constraints_fk'  : db_constraints,
-        'position'        : position,
-        'constraint_type' : grpc_constraint.custom.constraint_type,
-        'constraint_value': grpc_constraint.custom.constraint_value,
-    })
-    db_config_rule, updated = result
-    return db_config_rule, updated
+    # create generic constraint
+    constraint_fk_field_name = 'constraint_{:s}_fk'.format(constraint_kind.value)
+    constraint_data = {
+        'constraints_fk': db_constraints, 'position': position, 'kind': constraint_kind,
+        constraint_fk_field_name: db_specific_constraint
+    }
+    result : Tuple[ConstraintModel, bool] = update_or_create_object(
+        database, ConstraintModel, str_constraint_key, constraint_data)
+    db_constraint, updated = result
+
+    return db_constraint, updated
 
 def set_constraints(
     database : Database, db_parent_pk : str, constraints_name : str, grpc_constraints
@@ -85,7 +247,8 @@ def set_constraints(
     db_objects = [(db_constraints, created)]
 
     for position,grpc_constraint in enumerate(grpc_constraints):
-        result : Tuple[ConstraintModel, bool] = set_constraint(database, db_constraints, grpc_constraint, position)
+        result : Tuple[ConstraintModel, bool] = set_constraint(
+            database, db_constraints, grpc_constraint, position)
         db_constraint, updated = result
         db_objects.append((db_constraint, updated))
 
diff --git a/src/context/service/database/DeviceModel.py b/src/context/service/database/DeviceModel.py
index 0f0201190542397a34b68fa217706c904606ead3..0d42326793b44473d8aef3da2c3e9ce8464bd1c4 100644
--- a/src/context/service/database/DeviceModel.py
+++ b/src/context/service/database/DeviceModel.py
@@ -54,6 +54,24 @@ class DeviceModel(Model):
     device_config_fk = ForeignKeyField(ConfigModel)
     device_operational_status = EnumeratedField(ORM_DeviceOperationalStatusEnum, required=True)
 
+    def delete(self) -> None:
+        # pylint: disable=import-outside-toplevel
+        from .EndPointModel import EndPointModel
+        from .RelationModels import TopologyDeviceModel
+
+        for db_endpoint_pk,_ in self.references(EndPointModel):
+            EndPointModel(self.database, db_endpoint_pk).delete()
+
+        for db_topology_device_pk,_ in self.references(TopologyDeviceModel):
+            TopologyDeviceModel(self.database, db_topology_device_pk).delete()
+
+        for db_driver_pk,_ in self.references(DriverModel):
+            DriverModel(self.database, db_driver_pk).delete()
+
+        super().delete()
+
+        ConfigModel(self.database, self.device_config_fk).delete()
+
     def dump_id(self) -> Dict:
         return {'device_uuid': {'uuid': self.device_uuid}}
 
diff --git a/src/context/service/database/EndPointModel.py b/src/context/service/database/EndPointModel.py
index abeeb1b690b97e47772e3bf38d77016569bf55dc..aeef91b654dfaaaaf14d53f625126632b7303741 100644
--- a/src/context/service/database/EndPointModel.py
+++ b/src/context/service/database/EndPointModel.py
@@ -13,14 +13,16 @@
 # limitations under the License.
 
 import logging
-from typing import Dict, List
+from typing import Dict, List, Optional, Tuple
 from common.orm.Database import Database
+from common.orm.HighLevel import get_object
 from common.orm.backend.Tools import key_to_str
 from common.orm.fields.EnumeratedField import EnumeratedField
 from common.orm.fields.ForeignKeyField import ForeignKeyField
 from common.orm.fields.PrimaryKeyField import PrimaryKeyField
 from common.orm.fields.StringField import StringField
 from common.orm.model.Model import Model
+from common.proto.context_pb2 import EndPointId
 from .DeviceModel import DeviceModel
 from .KpiSampleType import ORM_KpiSampleTypeEnum, grpc_to_enum__kpi_sample_type
 from .TopologyModel import TopologyModel
@@ -34,6 +36,11 @@ class EndPointModel(Model):
     endpoint_uuid = StringField(required=True, allow_empty=False)
     endpoint_type = StringField()
 
+    def delete(self) -> None:
+        for db_kpi_sample_type_pk,_ in self.references(KpiSampleTypeModel):
+            KpiSampleTypeModel(self.database, db_kpi_sample_type_pk).delete()
+        super().delete()
+
     def dump_id(self) -> Dict:
         device_id = DeviceModel(self.database, self.device_fk).dump_id()
         result = {
@@ -75,3 +82,31 @@ def set_kpi_sample_types(database : Database, db_endpoint : EndPointModel, grpc_
         db_endpoint_kpi_sample_type.endpoint_fk = db_endpoint
         db_endpoint_kpi_sample_type.kpi_sample_type = orm_kpi_sample_type
         db_endpoint_kpi_sample_type.save()
+
+def get_endpoint(
+    database : Database, grpc_endpoint_id : EndPointId,
+    validate_topology_exists : bool = True, validate_device_in_topology : bool = True
+) -> Tuple[str, EndPointModel]:
+    endpoint_uuid                  = grpc_endpoint_id.endpoint_uuid.uuid
+    endpoint_device_uuid           = grpc_endpoint_id.device_id.device_uuid.uuid
+    endpoint_topology_uuid         = grpc_endpoint_id.topology_id.topology_uuid.uuid
+    endpoint_topology_context_uuid = grpc_endpoint_id.topology_id.context_id.context_uuid.uuid
+    str_endpoint_key = key_to_str([endpoint_device_uuid, endpoint_uuid])
+
+    if len(endpoint_topology_context_uuid) > 0 and len(endpoint_topology_uuid) > 0:
+        # check topology exists
+        str_topology_key = key_to_str([endpoint_topology_context_uuid, endpoint_topology_uuid])
+        if validate_topology_exists:
+            from .TopologyModel import TopologyModel
+            get_object(database, TopologyModel, str_topology_key)
+
+        # check device is in topology
+        str_topology_device_key = key_to_str([str_topology_key, endpoint_device_uuid], separator='--')
+        if validate_device_in_topology:
+            from .RelationModels import TopologyDeviceModel
+            get_object(database, TopologyDeviceModel, str_topology_device_key)
+
+        str_endpoint_key = key_to_str([str_endpoint_key, str_topology_key], separator=':')
+
+    db_endpoint : EndPointModel = get_object(database, EndPointModel, str_endpoint_key)
+    return str_endpoint_key, db_endpoint
diff --git a/src/context/service/database/LinkModel.py b/src/context/service/database/LinkModel.py
index 742044b9758df297413ad2d0318520c825e8b738..8f1d971c3127371e0d9a1a401d885a02269bd8dd 100644
--- a/src/context/service/database/LinkModel.py
+++ b/src/context/service/database/LinkModel.py
@@ -25,6 +25,18 @@ class LinkModel(Model):
     pk = PrimaryKeyField()
     link_uuid = StringField(required=True, allow_empty=False)
 
+    def delete(self) -> None:
+        #pylint: disable=import-outside-toplevel
+        from .RelationModels import LinkEndPointModel, TopologyLinkModel
+
+        for db_link_endpoint_pk,_ in self.references(LinkEndPointModel):
+            LinkEndPointModel(self.database, db_link_endpoint_pk).delete()
+
+        for db_topology_link_pk,_ in self.references(TopologyLinkModel):
+            TopologyLinkModel(self.database, db_topology_link_pk).delete()
+
+        super().delete()
+
     def dump_id(self) -> Dict:
         return {'link_uuid': {'uuid': self.link_uuid}}
 
diff --git a/src/context/service/database/ServiceModel.py b/src/context/service/database/ServiceModel.py
index cf756af60a8178a9ae2fda2a5fa5ddeebc73912c..8b32d1cc9eeec248d1097f972df93dbd2c0882fa 100644
--- a/src/context/service/database/ServiceModel.py
+++ b/src/context/service/database/ServiceModel.py
@@ -56,6 +56,18 @@ class ServiceModel(Model):
     service_status = EnumeratedField(ORM_ServiceStatusEnum, required=True)
     service_config_fk = ForeignKeyField(ConfigModel)
 
+    def delete(self) -> None:
+        #pylint: disable=import-outside-toplevel
+        from .RelationModels import ServiceEndPointModel
+
+        for db_service_endpoint_pk,_ in self.references(ServiceEndPointModel):
+            ServiceEndPointModel(self.database, db_service_endpoint_pk).delete()
+
+        super().delete()
+
+        ConfigModel(self.database, self.service_config_fk).delete()
+        ConstraintsModel(self.database, self.service_constraints_fk).delete()
+
     def dump_id(self) -> Dict:
         context_id = ContextModel(self.database, self.context_fk).dump_id()
         return {
diff --git a/src/context/service/database/SliceModel.py b/src/context/service/database/SliceModel.py
index 1bc51df2e10d46bb565ef7fbb34524e1e238be5f..bc00ada43758c9c5ffefbb88a87134aa46fbd73a 100644
--- a/src/context/service/database/SliceModel.py
+++ b/src/context/service/database/SliceModel.py
@@ -22,6 +22,7 @@ from common.orm.fields.StringField import StringField
 from common.orm.model.Model import Model
 from common.orm.HighLevel import get_related_objects
 from common.proto.context_pb2 import SliceStatusEnum
+from .ConfigModel import ConfigModel
 from .ConstraintModel import ConstraintsModel
 from .ContextModel import ContextModel
 from .Tools import grpc_to_enum
@@ -44,6 +45,25 @@ class SliceModel(Model):
     slice_uuid = StringField(required=True, allow_empty=False)
     slice_constraints_fk = ForeignKeyField(ConstraintsModel)
     slice_status = EnumeratedField(ORM_SliceStatusEnum, required=True)
+    slice_config_fk = ForeignKeyField(ConfigModel)
+
+    def delete(self) -> None:
+        # pylint: disable=import-outside-toplevel
+        from .RelationModels import SliceEndPointModel, SliceServiceModel, SliceSubSliceModel
+
+        for db_slice_endpoint_pk,_ in self.references(SliceEndPointModel):
+            SliceEndPointModel(self.database, db_slice_endpoint_pk).delete()
+
+        for db_slice_service_pk,_ in self.references(SliceServiceModel):
+            SliceServiceModel(self.database, db_slice_service_pk).delete()
+
+        for db_slice_subslice_pk,_ in self.references(SliceSubSliceModel):
+            SliceSubSliceModel(self.database, db_slice_subslice_pk).delete()
+
+        super().delete()
+
+        ConfigModel(self.database, self.slice_config_fk).delete()
+        ConstraintsModel(self.database, self.slice_constraints_fk).delete()
 
     def dump_id(self) -> Dict:
         context_id = ContextModel(self.database, self.context_fk).dump_id()
@@ -60,6 +80,9 @@ class SliceModel(Model):
     def dump_constraints(self) -> List[Dict]:
         return ConstraintsModel(self.database, self.slice_constraints_fk).dump()
 
+    def dump_config(self) -> Dict:
+        return ConfigModel(self.database, self.slice_config_fk).dump()
+
     def dump_service_ids(self) -> List[Dict]:
         from .RelationModels import SliceServiceModel # pylint: disable=import-outside-toplevel
         db_services = get_related_objects(self, SliceServiceModel, 'service_fk')
@@ -71,8 +94,8 @@ class SliceModel(Model):
         return [db_subslice.dump_id() for db_subslice in sorted(db_subslices, key=operator.attrgetter('pk'))]
 
     def dump(   # pylint: disable=arguments-differ
-            self, include_endpoint_ids=True, include_constraints=True, include_service_ids=True,
-            include_subslice_ids=True
+            self, include_endpoint_ids=True, include_constraints=True, include_config_rules=True,
+            include_service_ids=True, include_subslice_ids=True
         ) -> Dict:
         result = {
             'slice_id': self.dump_id(),
@@ -80,6 +103,7 @@ class SliceModel(Model):
         }
         if include_endpoint_ids: result['slice_endpoint_ids'] = self.dump_endpoint_ids()
         if include_constraints: result['slice_constraints'] = self.dump_constraints()
+        if include_config_rules: result.setdefault('slice_config', {})['config_rules'] = self.dump_config()
         if include_service_ids: result['slice_service_ids'] = self.dump_service_ids()
         if include_subslice_ids: result['slice_subslice_ids'] = self.dump_subslice_ids()
         return result
diff --git a/src/context/service/grpc_server/ContextServiceServicerImpl.py b/src/context/service/grpc_server/ContextServiceServicerImpl.py
index 49663069d77b6da3aad989d00e9e5bd108a89f78..4c8f957ecb70765cbd36032fca7bfacc27f9b5ae 100644
--- a/src/context/service/grpc_server/ContextServiceServicerImpl.py
+++ b/src/context/service/grpc_server/ContextServiceServicerImpl.py
@@ -31,23 +31,24 @@ from common.proto.context_pb2 import (
 from common.proto.context_pb2_grpc import ContextServiceServicer
 from common.rpc_method_wrapper.Decorator import create_metrics, safe_and_metered_rpc_method
 from common.rpc_method_wrapper.ServiceExceptions import InvalidArgumentException
-from context.service.database.ConfigModel import ConfigModel, ConfigRuleModel, grpc_config_rules_to_raw, update_config
-from context.service.database.ConnectionModel import ConnectionModel, PathHopModel, PathModel, set_path
-from context.service.database.ConstraintModel import ConstraintModel, ConstraintsModel, set_constraints
+from context.service.database.ConfigModel import grpc_config_rules_to_raw, update_config
+from context.service.database.ConnectionModel import ConnectionModel, set_path
+from context.service.database.ConstraintModel import set_constraints
 from context.service.database.ContextModel import ContextModel
-from context.service.database.DeviceModel import (
-    DeviceModel, DriverModel, grpc_to_enum__device_operational_status, set_drivers)
-from context.service.database.EndPointModel import EndPointModel, KpiSampleTypeModel, set_kpi_sample_types
+from context.service.database.DeviceModel import DeviceModel, grpc_to_enum__device_operational_status, set_drivers
+from context.service.database.EndPointModel import EndPointModel, set_kpi_sample_types
 from context.service.database.Events import notify_event
 from context.service.database.LinkModel import LinkModel
 from context.service.database.RelationModels import (
-    ConnectionSubServiceModel, LinkEndPointModel, ServiceEndPointModel, SliceEndPointModel, SliceServiceModel, SliceSubSliceModel, TopologyDeviceModel, TopologyLinkModel)
+    ConnectionSubServiceModel, LinkEndPointModel, ServiceEndPointModel, SliceEndPointModel, SliceServiceModel,
+    SliceSubSliceModel, TopologyDeviceModel, TopologyLinkModel)
 from context.service.database.ServiceModel import (
     ServiceModel, grpc_to_enum__service_status, grpc_to_enum__service_type)
 from context.service.database.SliceModel import SliceModel, grpc_to_enum__slice_status
 from context.service.database.TopologyModel import TopologyModel
 from .Constants import (
-    CONSUME_TIMEOUT, TOPIC_CONNECTION, TOPIC_CONTEXT, TOPIC_DEVICE, TOPIC_LINK, TOPIC_SERVICE, TOPIC_SLICE, TOPIC_TOPOLOGY)
+    CONSUME_TIMEOUT, TOPIC_CONNECTION, TOPIC_CONTEXT, TOPIC_DEVICE, TOPIC_LINK, TOPIC_SERVICE, TOPIC_SLICE,
+    TOPIC_TOPOLOGY)
 
 LOGGER = logging.getLogger(__name__)
 
@@ -336,25 +337,7 @@ class ContextServiceServicerImpl(ContextServiceServicer):
             if not found: return Empty()
 
             dict_device_id = db_device.dump_id()
-
-            for db_endpoint_pk,_ in db_device.references(EndPointModel):
-                db_endpoint = EndPointModel(self.database, db_endpoint_pk)
-                for db_kpi_sample_type_pk,_ in db_endpoint.references(KpiSampleTypeModel):
-                    KpiSampleTypeModel(self.database, db_kpi_sample_type_pk).delete()
-                db_endpoint.delete()
-
-            for db_topology_device_pk,_ in db_device.references(TopologyDeviceModel):
-                TopologyDeviceModel(self.database, db_topology_device_pk).delete()
-
-            for db_driver_pk,_ in db_device.references(DriverModel):
-                DriverModel(self.database, db_driver_pk).delete()
-
-            db_config = ConfigModel(self.database, db_device.device_config_fk)
-            for db_config_rule_pk,_ in db_config.references(ConfigRuleModel):
-                ConfigRuleModel(self.database, db_config_rule_pk).delete()
-
             db_device.delete()
-            db_config.delete()
 
             event_type = EventTypeEnum.EVENTTYPE_REMOVE
             notify_event(self.messagebroker, TOPIC_DEVICE, event_type, {'device_id': dict_device_id})
@@ -443,14 +426,8 @@ class ContextServiceServicerImpl(ContextServiceServicer):
             if not found: return Empty()
 
             dict_link_id = db_link.dump_id()
-
-            for db_link_endpoint_pk,_ in db_link.references(LinkEndPointModel):
-                LinkEndPointModel(self.database, db_link_endpoint_pk).delete()
-
-            for db_topology_link_pk,_ in db_link.references(TopologyLinkModel):
-                TopologyLinkModel(self.database, db_topology_link_pk).delete()
-
             db_link.delete()
+
             event_type = EventTypeEnum.EVENTTYPE_REMOVE
             notify_event(self.messagebroker, TOPIC_LINK, event_type, {'link_id': dict_link_id})
             return Empty()
@@ -557,21 +534,7 @@ class ContextServiceServicerImpl(ContextServiceServicer):
             if not found: return Empty()
 
             dict_service_id = db_service.dump_id()
-
-            for db_service_endpoint_pk,_ in db_service.references(ServiceEndPointModel):
-                ServiceEndPointModel(self.database, db_service_endpoint_pk).delete()
-
-            db_config = ConfigModel(self.database, db_service.service_config_fk)
-            for db_config_rule_pk,_ in db_config.references(ConfigRuleModel):
-                ConfigRuleModel(self.database, db_config_rule_pk).delete()
-
-            db_constraints = ConstraintsModel(self.database, db_service.service_constraints_fk)
-            for db_constraint_pk,_ in db_constraints.references(ConstraintModel):
-                ConstraintModel(self.database, db_constraint_pk).delete()
-
             db_service.delete()
-            db_config.delete()
-            db_constraints.delete()
 
             event_type = EventTypeEnum.EVENTTYPE_REMOVE
             notify_event(self.messagebroker, TOPIC_SERVICE, event_type, {'service_id': dict_service_id})
@@ -607,8 +570,8 @@ class ContextServiceServicerImpl(ContextServiceServicer):
             str_key = key_to_str([request.context_id.context_uuid.uuid, request.slice_uuid.uuid])
             db_slice : SliceModel = get_object(self.database, SliceModel, str_key)
             return Slice(**db_slice.dump(
-                include_endpoint_ids=True, include_constraints=True, include_service_ids=True,
-                include_subslice_ids=True))
+                include_endpoint_ids=True, include_constraints=True, include_config_rules=True,
+                include_service_ids=True, include_subslice_ids=True))
 
     @safe_and_metered_rpc_method(METRICS, LOGGER)
     def SetSlice(self, request: Slice, context : grpc.ServicerContext) -> SliceId:
@@ -632,11 +595,16 @@ class ContextServiceServicerImpl(ContextServiceServicer):
                 self.database, str_slice_key, 'constraints', request.slice_constraints)
             db_constraints = constraints_result[0][0]
 
+            config_rules = grpc_config_rules_to_raw(request.slice_config.config_rules)
+            running_config_result = update_config(self.database, str_slice_key, 'running', config_rules)
+            db_running_config = running_config_result[0][0]
+
             result : Tuple[SliceModel, bool] = update_or_create_object(self.database, SliceModel, str_slice_key, {
                 'context_fk'          : db_context,
                 'slice_uuid'          : slice_uuid,
                 'slice_constraints_fk': db_constraints,
                 'slice_status'        : grpc_to_enum__slice_status(request.slice_status.slice_status),
+                'slice_config_fk'     : db_running_config,
             })
             db_slice, updated = result
 
@@ -698,22 +666,7 @@ class ContextServiceServicerImpl(ContextServiceServicer):
             if not found: return Empty()
 
             dict_slice_id = db_slice.dump_id()
-
-            for db_slice_endpoint_pk,_ in db_slice.references(SliceEndPointModel):
-                SliceEndPointModel(self.database, db_slice_endpoint_pk).delete()
-
-            db_constraints = ConstraintsModel(self.database, db_slice.slice_constraints_fk)
-            for db_constraint_pk,_ in db_constraints.references(ConstraintModel):
-                ConstraintModel(self.database, db_constraint_pk).delete()
-
-            for db_slice_service_pk,_ in db_slice.references(SliceServiceModel):
-                SliceServiceModel(self.database, db_slice_service_pk).delete()
-
-            for db_slice_subslice_pk,_ in db_slice.references(SliceSubSliceModel):
-                SliceSubSliceModel(self.database, db_slice_subslice_pk).delete()
-
             db_slice.delete()
-            db_constraints.delete()
 
             event_type = EventTypeEnum.EVENTTYPE_REMOVE
             notify_event(self.messagebroker, TOPIC_SLICE, event_type, {'slice_id': dict_slice_id})
@@ -798,20 +751,7 @@ class ContextServiceServicerImpl(ContextServiceServicer):
             if not found: return Empty()
 
             dict_connection_id = db_connection.dump_id()
-
-            db_path = PathModel(self.database, db_connection.path_fk)
-            for db_path_hop_pk,_ in db_path.references(PathHopModel):
-                PathHopModel(self.database, db_path_hop_pk).delete()
-
-            # Do not remove sub-services automatically. They are supported by real services, so Service component should
-            # deal with the correct removal workflow to deconfigure the devices.
-            for db_connection_sub_service_pk,_ in db_connection.references(ConnectionSubServiceModel):
-                db_connection_sub_service : ConnectionSubServiceModel = get_object(
-                    self.database, ConnectionSubServiceModel, db_connection_sub_service_pk)
-                db_connection_sub_service.delete()
-
             db_connection.delete()
-            db_path.delete()
 
             event_type = EventTypeEnum.EVENTTYPE_REMOVE
             notify_event(self.messagebroker, TOPIC_CONNECTION, event_type, {'connection_id': dict_connection_id})
diff --git a/src/context/tests/test_unitary.py b/src/context/tests/test_unitary.py
index efdd1f8b96a09b31b7d144b676ddd355152fc003..b46c9468c56974be5c987dbbc284daae337d3c7b 100644
--- a/src/context/tests/test_unitary.py
+++ b/src/context/tests/test_unitary.py
@@ -846,7 +846,7 @@ def test_grpc_service(
     for db_entry in db_entries:
         LOGGER.info('  [{:>4s}] {:40s} :: {:s}'.format(*db_entry)) # pragma: no cover
     LOGGER.info('-----------------------------------------------------------')
-    assert len(db_entries) == 84
+    assert len(db_entries) == 89
 
     # ----- Get when the object exists ---------------------------------------------------------------------------------
     response = context_client_grpc.GetService(ServiceId(**SERVICE_R1_R2_ID))
@@ -1042,7 +1042,7 @@ def test_grpc_connection(
     for db_entry in db_entries:
         LOGGER.info('  [{:>4s}] {:40s} :: {:s}'.format(*db_entry)) # pragma: no cover
     LOGGER.info('-----------------------------------------------------------')
-    assert len(db_entries) == 137
+    assert len(db_entries) == 150
 
     # ----- Create the object ------------------------------------------------------------------------------------------
     with pytest.raises(grpc.RpcError) as e:
@@ -1082,7 +1082,7 @@ def test_grpc_connection(
     for db_entry in db_entries:
         LOGGER.info('  [{:>4s}] {:40s} :: {:s}'.format(*db_entry)) # pragma: no cover
     LOGGER.info('-----------------------------------------------------------')
-    assert len(db_entries) == 153
+    assert len(db_entries) == 166
 
     # ----- Get when the object exists ---------------------------------------------------------------------------------
     response = context_client_grpc.GetConnection(ConnectionId(**CONNECTION_R1_R3_ID))
diff --git a/src/device/requirements.in b/src/device/requirements.in
index e5aaddecb4901da55a411d83c8c1df26f8d47069..10506fbd42c5b7a64afb3cc7c6ea32e0f1fa49f6 100644
--- a/src/device/requirements.in
+++ b/src/device/requirements.in
@@ -5,7 +5,6 @@ Jinja2==3.0.3
 ncclient==0.6.13
 p4runtime==1.3.0
 paramiko==2.9.2
-python-dateutil==2.8.2
 python-json-logger==2.0.2
 pytz==2021.3
 redis==4.1.2
diff --git a/src/device/service/MonitoringLoops.py b/src/device/service/MonitoringLoops.py
index 4d6d3f59147026c3104062cca0684ea9e3a304cf..18faed0d51d8d594368a0c80ef03539a9b0c4d4e 100644
--- a/src/device/service/MonitoringLoops.py
+++ b/src/device/service/MonitoringLoops.py
@@ -129,8 +129,8 @@ class MonitoringLoops:
             # FIXME: uint32 used for intVal results in out of range issues. Temporarily changed to float
             #        extend the 'kpi_value' to support long integers (uint64 / int64 / ...)
             if isinstance(value, int):
-                kpi_value_field_name = 'floatVal'   # 'intVal'
-                kpi_value_field_cast = float        # int
+                kpi_value_field_name = 'int64Val'
+                kpi_value_field_cast = int
             elif isinstance(value, float):
                 kpi_value_field_name = 'floatVal'
                 kpi_value_field_cast = float
@@ -144,7 +144,7 @@ class MonitoringLoops:
             try:
                 self._monitoring_client.IncludeKpi(Kpi(**{
                     'kpi_id'   : {'kpi_id': {'uuid': db_kpi.kpi_uuid}},
-                    'timestamp': datetime.utcfromtimestamp(timestamp).isoformat() + 'Z',
+                    'timestamp': {'timestamp': timestamp},
                     'kpi_value': {kpi_value_field_name: kpi_value_field_cast(value)}
                 }))
             except: # pylint: disable=bare-except
diff --git a/src/device/tests/test_unitary_emulated.py b/src/device/tests/test_unitary_emulated.py
index 48331347ffcc9f3b3a05f271e3f2e342caef88b2..745c25c1eba679dc67e0ed9e04f38eb0ae8c3af4 100644
--- a/src/device/tests/test_unitary_emulated.py
+++ b/src/device/tests/test_unitary_emulated.py
@@ -86,6 +86,15 @@ def test_device_emulated_add_correct(
     driver : _Driver = driver_instance_cache.get(DEVICE_EMU_UUID) # we know the driver exists now
     assert driver is not None
 
+    device_data = context_client.GetDevice(DeviceId(**DEVICE_EMU_ID))
+    config_rules = [
+        (ConfigActionEnum.Name(config_rule.action), config_rule.custom.resource_key, config_rule.custom.resource_value)
+        for config_rule in device_data.device_config.config_rules
+        if config_rule.WhichOneof('config_rule') == 'custom'
+    ]
+    LOGGER.info('device_data.device_config.config_rules = \n{:s}'.format(
+        '\n'.join(['{:s} {:s} = {:s}'.format(*config_rule) for config_rule in config_rules])))
+
 
 def test_device_emulated_get(
     context_client : ContextClient,     # pylint: disable=redefined-outer-name
@@ -290,12 +299,7 @@ def test_device_emulated_monitor(
     for received_sample in received_samples:
         kpi_uuid = received_sample.kpi_id.kpi_id.uuid
         assert kpi_uuid in KPI_UUIDS__TO__NUM_SAMPLES_RECEIVED
-        assert isinstance(received_sample.timestamp, str)
-        try:
-            timestamp = float(received_sample.timestamp)
-        except ValueError:
-            dt_time = dateutil.parser.isoparse(received_sample.timestamp).replace(tzinfo=timezone.utc)
-            timestamp = float(calendar.timegm(dt_time.timetuple())) + (dt_time.microsecond / 1.e6)
+        timestamp = float(received_sample.timestamp.timestamp)
         assert timestamp > t_start_monitoring
         assert timestamp < t_end_monitoring
         assert received_sample.kpi_value.HasField('floatVal') or received_sample.kpi_value.HasField('intVal')
diff --git a/src/device/tests/test_unitary_openconfig.py b/src/device/tests/test_unitary_openconfig.py
index 47bea7ef68475c8b447b52d234d8ab44fa4ab684..32fb5709a98d095982d46d16450117a84f89f165 100644
--- a/src/device/tests/test_unitary_openconfig.py
+++ b/src/device/tests/test_unitary_openconfig.py
@@ -88,8 +88,9 @@ def test_device_openconfig_add_correct(
 
     device_data = context_client.GetDevice(DeviceId(**DEVICE_OC_ID))
     config_rules = [
-        (ConfigActionEnum.Name(config_rule.action), config_rule.resource_key, config_rule.resource_value)
+        (ConfigActionEnum.Name(config_rule.action), config_rule.custom.resource_key, config_rule.custom.resource_value)
         for config_rule in device_data.device_config.config_rules
+        if config_rule.WhichOneof('config_rule') == 'custom'
     ]
     LOGGER.info('device_data.device_config.config_rules = \n{:s}'.format(
         '\n'.join(['{:s} {:s} = {:s}'.format(*config_rule) for config_rule in config_rules])))
@@ -135,8 +136,9 @@ def test_device_openconfig_configure(
 
     device_data = context_client.GetDevice(DeviceId(**DEVICE_OC_ID))
     config_rules = [
-        (ConfigActionEnum.Name(config_rule.action), config_rule.resource_key, config_rule.resource_value)
+        (ConfigActionEnum.Name(config_rule.action), config_rule.custom.resource_key, config_rule.custom.resource_value)
         for config_rule in device_data.device_config.config_rules
+        if config_rule.WhichOneof('config_rule') == 'custom'
     ]
     LOGGER.info('device_data.device_config.config_rules = \n{:s}'.format(
         '\n'.join(['{:s} {:s} = {:s}'.format(*config_rule) for config_rule in config_rules])))
@@ -276,7 +278,7 @@ def test_device_openconfig_deconfigure(
 
     device_data = context_client.GetDevice(DeviceId(**DEVICE_OC_ID))
     config_rules = [
-        (ConfigActionEnum.Name(config_rule.action), config_rule.resource_key, config_rule.resource_value)
+        (ConfigActionEnum.Name(config_rule.action), config_rule.custom.resource_key, config_rule.custom.resource_value)
         for config_rule in device_data.device_config.config_rules
         if config_rule.WhichOneof('config_rule') == 'custom'
     ]
diff --git a/src/monitoring/.gitignore b/src/monitoring/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..ac497892a71b6dda0ef118a1d174a5409849a201
--- /dev/null
+++ b/src/monitoring/.gitignore
@@ -0,0 +1,3 @@
+# Ignoring specific folders/files used internally while coding Monitoring component
+proto/
+genproto_win.sh
diff --git a/src/monitoring/.gitlab-ci.yml b/src/monitoring/.gitlab-ci.yml
index fac3f967bbf531ef5cc9b67b2a1afe47fb9990d5..246b29bd42a889b0662a8ab0cb8b198e8f4b92ab 100644
--- a/src/monitoring/.gitlab-ci.yml
+++ b/src/monitoring/.gitlab-ci.yml
@@ -49,14 +49,14 @@ unit test monitoring:
   before_script:
     - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
     - if docker network list | grep teraflowbridge; then echo "teraflowbridge is already created"; else docker network create -d bridge teraflowbridge; fi
-    - if docker container ls | grep influxdb; then docker rm -f influxdb; else echo "influxdb image is not in the system"; fi
+    - if docker container ls | grep questdb; then docker rm -f questdb; else echo "questdb image is not in the system"; fi
     - if docker container ls | grep $IMAGE_NAME; then docker rm -f $IMAGE_NAME; else echo "$IMAGE_NAME image is not in the system"; fi
   script:
     - docker pull "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
-    - docker pull "influxdb:1.8"
-    - docker run --name influxdb -d -p 8086:8086 -e INFLUXDB_DB=$INFLUXDB_DATABASE -e INFLUXDB_ADMIN_USER=$INFLUXDB_USER -e INFLUXDB_ADMIN_PASSWORD=$INFLUXDB_PASSWORD -e INFLUXDB_HTTP_AUTH_ENABLED=True --network=teraflowbridge influxdb:1.8
+    - docker pull questdb/questdb
+    - docker run --name questdb -d -p 9000:9000  -p 9009:9009  -p 8812:8812  -p 9003:9003  -e QDB_CAIRO_COMMIT_LAG=1000 -e QDB_CAIRO_MAX_UNCOMMITTED_ROWS=100000 --network=teraflowbridge --rm questdb/questdb
     - sleep 10
-    - docker run --name $IMAGE_NAME -d -p 7070:7070 --env INFLUXDB_USER=$INFLUXDB_USER --env INFLUXDB_PASSWORD=$INFLUXDB_PASSWORD --env INFLUXDB_DATABASE=$INFLUXDB_DATABASE --env INFLUXDB_HOSTNAME=influxdb --env INFLUXDB_PORT=8086 -v "$PWD/src/$IMAGE_NAME/tests:/opt/results" --network=teraflowbridge $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG
+    - docker run --name $IMAGE_NAME -d -p 7070:7070 --env METRICSDB_HOSTNAME=localhost --env METRICSDB_ILP_PORT=9009 --env METRICSDB_REST_PORT=9000 --env METRICSDB_TABLE=monitoring -v "$PWD/src/$IMAGE_NAME/tests:/opt/results" --network=teraflowbridge $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG
     - sleep 30
     - docker ps -a
     - docker logs $IMAGE_NAME
@@ -65,7 +65,7 @@ unit test monitoring:
   coverage: '/TOTAL\s+\d+\s+\d+\s+(\d+%)/'
   after_script:
     - docker rm -f $IMAGE_NAME
-    - docker rm -f  influxdb
+    - docker rm -f  questdb
     - docker network rm teraflowbridge
   rules:
     - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)'
diff --git a/src/monitoring/client/MonitoringClient.py b/src/monitoring/client/MonitoringClient.py
index 7042042dac6c070f79885226ec9a576e10c38f40..f65072f19013b820312aa56b7f0062f9c95f712c 100644
--- a/src/monitoring/client/MonitoringClient.py
+++ b/src/monitoring/client/MonitoringClient.py
@@ -16,11 +16,14 @@ import grpc, logging
 from typing import Iterator
 from common.Constants import ServiceNameEnum
 from common.Settings import get_service_host, get_service_port_grpc
-from common.proto.context_pb2 import Empty
-from common.proto.monitoring_pb2 import Kpi, KpiDescriptor, KpiId, MonitorKpiRequest
-from common.proto.monitoring_pb2_grpc import MonitoringServiceStub
+
 from common.tools.client.RetryDecorator import retry, delay_exponential
 from common.tools.grpc.Tools import grpc_message_to_json_string
+from common.proto.context_pb2 import Empty
+from common.proto.monitoring_pb2 import Kpi, KpiDescriptor, KpiId, MonitorKpiRequest, \
+    KpiDescriptorList, KpiQuery, KpiList, SubsDescriptor, SubscriptionID, SubsIDList, \
+    AlarmDescriptor, AlarmID, AlarmIDList, AlarmResponse, AlarmSubscription
+from common.proto.monitoring_pb2_grpc import MonitoringServiceStub
 
 LOGGER = logging.getLogger(__name__)
 MAX_RETRIES = 15
@@ -48,10 +51,17 @@ class MonitoringClient:
         self.stub = None
 
     @RETRY_DECORATOR
-    def CreateKpi(self, request : KpiDescriptor) -> KpiId:
-        LOGGER.debug('CreateKpi: {:s}'.format(grpc_message_to_json_string(request)))
-        response = self.stub.CreateKpi(request)
-        LOGGER.debug('CreateKpi result: {:s}'.format(grpc_message_to_json_string(response)))
+    def SetKpi(self, request : KpiDescriptor) -> KpiId:
+        LOGGER.debug('SetKpi: {:s}'.format(grpc_message_to_json_string(request)))
+        response = self.stub.SetKpi(request)
+        LOGGER.debug('SetKpi result: {:s}'.format(grpc_message_to_json_string(response)))
+        return response
+
+    @RETRY_DECORATOR
+    def DeleteKpi(self,request : KpiId) -> Empty:
+        LOGGER.debug('DeleteKpi: {:s}'.format(grpc_message_to_json_string(request)))
+        response = self.stub.DeleteKpi(request)
+        LOGGER.info('DeleteKpi result: {:s}'.format(grpc_message_to_json_string(response)))
         return response
 
     @RETRY_DECORATOR
@@ -61,6 +71,13 @@ class MonitoringClient:
         LOGGER.debug('GetKpiDescriptor result: {:s}'.format(grpc_message_to_json_string(response)))
         return response
 
+    @RETRY_DECORATOR
+    def GetKpiDescriptorList(self, request : Empty) -> KpiDescriptorList:
+        LOGGER.debug('GetKpiDescriptorList: {:s}'.format(grpc_message_to_json_string(request)))
+        response = self.stub.GetKpiDescriptorList(request)
+        LOGGER.debug('GetKpiDescriptorList result: {:s}'.format(grpc_message_to_json_string(response)))
+        return response
+
     @RETRY_DECORATOR
     def IncludeKpi(self, request : Kpi) -> Empty:
         LOGGER.debug('IncludeKpi: {:s}'.format(grpc_message_to_json_string(request)))
@@ -75,6 +92,73 @@ class MonitoringClient:
         LOGGER.debug('MonitorKpi result: {:s}'.format(grpc_message_to_json_string(response)))
         return response
 
+    @RETRY_DECORATOR
+    def QueryKpiData(self, request : KpiQuery) -> KpiList:
+        LOGGER.debug('QueryKpiData: {:s}'.format(grpc_message_to_json_string(request)))
+        response = self.stub.QueryKpiData(request)
+        LOGGER.debug('QueryKpiData result: {:s}'.format(grpc_message_to_json_string(response)))
+        return response
+
+    @RETRY_DECORATOR
+    def SubscribeKpi(self, request : SubsDescriptor) -> Iterator[KpiList]:
+        LOGGER.debug('SubscribeKpi: {:s}'.format(grpc_message_to_json_string(request)))
+        response = self.stub.SubscribeKpi(request)
+        LOGGER.debug('SubscribeKpi result: {:s}'.format(grpc_message_to_json_string(response)))
+        return response
+
+    @RETRY_DECORATOR
+    def GetSubsDescriptor(self, request : SubscriptionID) -> SubsDescriptor:
+        LOGGER.debug('GetSubsDescriptor: {:s}'.format(grpc_message_to_json_string(request)))
+        response = self.stub.GetSubsDescriptor(request)
+        LOGGER.debug('GetSubsDescriptor result: {:s}'.format(grpc_message_to_json_string(response)))
+        return response
+
+    @RETRY_DECORATOR
+    def GetSubscriptions(self, request : Empty) -> SubsIDList:
+        LOGGER.debug('GetSubscriptions: {:s}'.format(grpc_message_to_json_string(request)))
+        response = self.stub.GetSubscriptions(request)
+        LOGGER.debug('GetSubscriptions result: {:s}'.format(grpc_message_to_json_string(response)))
+        return response
+
+    @RETRY_DECORATOR
+    def DeleteSubscription(self, request : SubscriptionID) -> Empty:
+        LOGGER.debug('DeleteSubscription: {:s}'.format(grpc_message_to_json_string(request)))
+        response = self.stub.DeleteSubscription(request)
+        LOGGER.debug('DeleteSubscription result: {:s}'.format(grpc_message_to_json_string(response)))
+        return response
+
+    @RETRY_DECORATOR
+    def SetKpiAlarm(self, request : AlarmDescriptor) -> AlarmID:
+        LOGGER.debug('SetKpiAlarm: {:s}'.format(grpc_message_to_json_string(request)))
+        response = self.stub.SetKpiAlarm(request)
+        LOGGER.debug('SetKpiAlarm result: {:s}'.format(grpc_message_to_json_string(response)))
+        return response
+
+    @RETRY_DECORATOR
+    def GetAlarms(self, request : Empty) -> AlarmIDList:
+        LOGGER.debug('GetAlarms: {:s}'.format(grpc_message_to_json_string(request)))
+        response = self.stub.GetAlarms(request)
+        LOGGER.debug('GetAlarms result: {:s}'.format(grpc_message_to_json_string(response)))
+        return response
+
+    def GetAlarmDescriptor(self, request : AlarmID) -> AlarmDescriptor:
+        LOGGER.debug('GetAlarmDescriptor: {:s}'.format(grpc_message_to_json_string(request)))
+        response = self.stub.GetAlarmDescriptor(request)
+        LOGGER.debug('GetAlarmDescriptor result: {:s}'.format(grpc_message_to_json_string(response)))
+        return response
+
+    def GetAlarmResponseStream(self, request : AlarmSubscription) -> AlarmResponse:
+        LOGGER.debug('GetAlarmResponseStream: {:s}'.format(grpc_message_to_json_string(request)))
+        response = self.stub.GetAlarmResponseStream(request)
+        LOGGER.debug('GetAlarmResponseStream result: {:s}'.format(grpc_message_to_json_string(response)))
+        return response
+
+    def DeleteAlarm(self, request : AlarmID) -> Empty:
+        LOGGER.debug('DeleteAlarm: {:s}'.format(grpc_message_to_json_string(request)))
+        response = self.stub.DeleteAlarm(request)
+        LOGGER.debug('DeleteAlarm result: {:s}'.format(grpc_message_to_json_string(response)))
+        return response
+
     @RETRY_DECORATOR
     def GetStreamKpi(self, request : KpiId) -> Iterator[Kpi]:
         LOGGER.debug('GetStreamKpi: {:s}'.format(grpc_message_to_json_string(request)))
diff --git a/src/monitoring/requirements.in b/src/monitoring/requirements.in
index 1b5459e32c326893f89df02bd1c96fb459577a36..c77d9683a2372435779db520f9f4c537d5e012b0 100644
--- a/src/monitoring/requirements.in
+++ b/src/monitoring/requirements.in
@@ -9,7 +9,7 @@ Jinja2==3.0.3
 ncclient==0.6.13
 p4runtime==1.3.0
 paramiko==2.9.2
-influxdb
+influx-line-protocol==0.1.4
 python-dateutil==2.8.2
 python-json-logger==2.0.2
 pytz==2021.3
diff --git a/src/monitoring/service/EventTools.py b/src/monitoring/service/EventTools.py
index 6d017b627e2d464efbb67c7903afa529176bccd3..cbcf920f1c5dc98a18b0e48a123bc6490f55737c 100644
--- a/src/monitoring/service/EventTools.py
+++ b/src/monitoring/service/EventTools.py
@@ -91,14 +91,11 @@ class EventsDeviceCollector:
                             kpi_descriptor.device_id.CopyFrom(device.device_id)
                             kpi_descriptor.endpoint_id.CopyFrom(end_point.endpoint_id)
 
-                            kpi_id = self._monitoring_client.CreateKpi(kpi_descriptor)
+                            kpi_id = self._monitoring_client.SetKpi(kpi_descriptor)
                             kpi_id_list.append(kpi_id)
-
             return kpi_id_list
-
         except ServiceException as e:
             LOGGER.exception('ListenEvents exception')
-
         except Exception as e:  # pragma: no cover
             LOGGER.exception('ListenEvents exception')
 
diff --git a/src/monitoring/service/MetricsDBTools.py b/src/monitoring/service/MetricsDBTools.py
new file mode 100644
index 0000000000000000000000000000000000000000..ea6180aa072bd48a04f26d019ba1e4ab9e08af88
--- /dev/null
+++ b/src/monitoring/service/MetricsDBTools.py
@@ -0,0 +1,52 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from influx_line_protocol import Metric
+import socket
+import requests
+import json
+import sys
+
+class MetricsDB():
+  def __init__(self, host, ilp_port, rest_port, table):
+      self.socket=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+      self.host=host
+      self.ilp_port=ilp_port
+      self.rest_port=rest_port
+      self.table=table
+
+  def write_KPI(self,time,kpi_id,kpi_sample_type,device_id,endpoint_id,service_id,kpi_value):
+    self.socket.connect((self.host,self.ilp_port))
+    metric = Metric(self.table)
+    metric.with_timestamp(time)
+    metric.add_tag('kpi_id', kpi_id)
+    metric.add_tag('kpi_sample_type', kpi_sample_type)
+    metric.add_tag('device_id', device_id)
+    metric.add_tag('endpoint_id', endpoint_id)
+    metric.add_tag('service_id', service_id)
+    metric.add_value('kpi_value', kpi_value)
+    str_metric = str(metric)
+    str_metric += "\n"
+    self.socket.sendall((str_metric).encode())
+    self.socket.close()
+
+  def run_query(self, sql_query):
+      query_params = {'query': sql_query, 'fmt' : 'json'}
+      url = f"http://{self.host}:{self.rest_port}/exec"
+      try:
+          response = requests.get(url, params=query_params)
+          json_response = json.loads(response.text)
+          print(json_response)
+      except requests.exceptions.RequestException as e:
+          print(f'Error: {e}', file=sys.stderr)
diff --git a/src/monitoring/service/MonitoringServiceServicerImpl.py b/src/monitoring/service/MonitoringServiceServicerImpl.py
index 00dbf7c8ce84c618581762090ddfca663e304814..d9f8b1e100bada795f8d6c91a796f458da8d212f 100644
--- a/src/monitoring/service/MonitoringServiceServicerImpl.py
+++ b/src/monitoring/service/MonitoringServiceServicerImpl.py
@@ -13,47 +13,62 @@
 # limitations under the License.
 
 import os, grpc, logging
-from prometheus_client import Counter, Summary
-from common.proto import context_pb2
-from common.proto import device_pb2
-from common.proto import monitoring_pb2
-from common.proto import monitoring_pb2_grpc
+
+from typing import Iterator
+
+from common.Constants import ServiceNameEnum
+from common.Settings import get_setting, get_service_port_grpc, get_service_host
+from common.proto.context_pb2 import Empty
+from common.proto.device_pb2 import MonitoringSettings
 from common.proto.kpi_sample_types_pb2 import KpiSampleType
+from common.proto.monitoring_pb2_grpc import MonitoringServiceServicer
+from common.proto.monitoring_pb2 import AlarmResponse, AlarmDescriptor, AlarmIDList, SubsIDList, KpiId, \
+    KpiDescriptor, KpiList, KpiQuery, SubsDescriptor, SubscriptionID, AlarmID, KpiDescriptorList, \
+    MonitorKpiRequest, Kpi, AlarmSubscription
 from common.rpc_method_wrapper.ServiceExceptions import ServiceException
-from monitoring.service import SqliteTools, InfluxTools
+from common.tools.timestamp.Converters import timestamp_float_to_string
+
+from monitoring.service import SqliteTools, MetricsDBTools
 from device.client.DeviceClient import DeviceClient
 
+from prometheus_client import Counter, Summary
+
 LOGGER = logging.getLogger(__name__)
 
 MONITORING_GETINSTANTKPI_REQUEST_TIME = Summary(
     'monitoring_getinstantkpi_processing_seconds', 'Time spent processing monitoring instant kpi request')
 MONITORING_INCLUDEKPI_COUNTER = Counter('monitoring_includekpi_counter', 'Monitoring include kpi request counter')
 
-INFLUXDB_HOSTNAME = os.environ.get("INFLUXDB_HOSTNAME")
-INFLUXDB_USER = os.environ.get("INFLUXDB_USER")
-INFLUXDB_PASSWORD = os.environ.get("INFLUXDB_PASSWORD")
-INFLUXDB_DATABASE = os.environ.get("INFLUXDB_DATABASE")
+METRICSDB_HOSTNAME = os.environ.get("METRICSDB_HOSTNAME")
+METRICSDB_ILP_PORT = os.environ.get("METRICSDB_ILP_PORT")
+METRICSDB_REST_PORT = os.environ.get("METRICSDB_REST_PORT")
+METRICSDB_TABLE = os.environ.get("METRICSDB_TABLE")
 
 
-class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceServicer):
+DEVICESERVICE_SERVICE_HOST = get_setting('DEVICESERVICE_SERVICE_HOST',      default=get_service_host(ServiceNameEnum.DEVICE)     )
+DEVICESERVICE_SERVICE_PORT_GRPC = get_setting('DEVICESERVICE_SERVICE_PORT_GRPC', default=get_service_port_grpc(ServiceNameEnum.DEVICE))
+
+
+class MonitoringServiceServicerImpl(MonitoringServiceServicer):
     def __init__(self):
         LOGGER.info('Init monitoringService')
 
         # Init sqlite monitoring db
         self.sql_db = SqliteTools.SQLite('monitoring.db')
+        self.deviceClient = DeviceClient(host=DEVICESERVICE_SERVICE_HOST, port=DEVICESERVICE_SERVICE_PORT_GRPC)  # instantiate the client
 
-        # Create influx_db client
-        self.influx_db = InfluxTools.Influx(INFLUXDB_HOSTNAME,"8086",INFLUXDB_USER,INFLUXDB_PASSWORD,INFLUXDB_DATABASE)
+        # Set metrics_db client
+        self.metrics_db = MetricsDBTools.MetricsDB(METRICSDB_HOSTNAME,METRICSDB_ILP_PORT,METRICSDB_REST_PORT,METRICSDB_TABLE)
 
-    # CreateKpi (CreateKpiRequest) returns (KpiId) {}
-    def CreateKpi(
-        self, request : monitoring_pb2.KpiDescriptor, grpc_context : grpc.ServicerContext
-    ) -> monitoring_pb2.KpiId:
+    # SetKpi (SetKpiRequest) returns (KpiId) {}
+    def SetKpi(
+        self, request : KpiDescriptor, grpc_context : grpc.ServicerContext
+    ) -> KpiId:
         # CREATEKPI_COUNTER_STARTED.inc()
-        LOGGER.info('CreateKpi')
+        LOGGER.info('SetKpi')
         try:
             # Here the code to create a sqlite query to crete a KPI and return a KpiID
-            kpi_id = monitoring_pb2.KpiId()
+            kpi_id = KpiId()
 
             kpi_description = request.kpi_description
             kpi_sample_type = request.kpi_sample_type
@@ -69,30 +84,52 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService
             # CREATEKPI_COUNTER_COMPLETED.inc()
             return kpi_id
         except ServiceException as e:
-            LOGGER.exception('CreateKpi exception')
+            LOGGER.exception('SetKpi exception')
             # CREATEKPI_COUNTER_FAILED.inc()
             grpc_context.abort(e.code, e.details)
         except Exception as e:  # pragma: no cover
-            LOGGER.exception('CreateKpi exception')
+            LOGGER.exception('SetKpi exception')
             # CREATEKPI_COUNTER_FAILED.inc()
             grpc_context.abort(grpc.StatusCode.INTERNAL, str(e))
 
+    def DeleteKpi ( self, request : KpiId, grpc_context : grpc.ServicerContext) -> Empty:
+
+        LOGGER.info('DeleteKpi')
+        try:
+             # TBC
+            return Empty()
+        except ServiceException as e:
+            LOGGER.exception('DeleteKpi exception')
+            grpc_context.abort(e.code, e.details)
+        except Exception as e:  # pragma: no cover
+            LOGGER.exception('DeleteKpi exception')
+
+    def GetKpiDescriptorList ( self, request : Empty, grpc_context : grpc.ServicerContext) -> KpiDescriptorList:
+
+        LOGGER.info('GetKpiDescriptorList')
+        try:
+             # TBC
+            return KpiDescriptorList()
+        except ServiceException as e:
+            LOGGER.exception('GetKpiDescriptorList exception')
+            grpc_context.abort(e.code, e.details)
+        except Exception as e:  # pragma: no cover
+            LOGGER.exception('GetKpiDescriptorList exception')
+
     # rpc MonitorKpi (MonitorKpiRequest) returns (context.Empty) {}
-    def MonitorKpi(
-        self, request : monitoring_pb2.MonitorKpiRequest, grpc_context : grpc.ServicerContext
-    ) -> context_pb2.Empty:
+    def MonitorKpi ( self, request : MonitorKpiRequest, grpc_context : grpc.ServicerContext) -> Empty:
 
         LOGGER.info('MonitorKpi')
         try:
-            # Creates the request to send to the device service
-            monitor_device_request = device_pb2.MonitoringSettings()
+            # Sets the request to send to the device service
+            monitor_device_request = MonitoringSettings()
 
             kpiDescriptor = self.GetKpiDescriptor(request.kpi_id, grpc_context)
 
             monitor_device_request.kpi_descriptor.CopyFrom(kpiDescriptor)
             monitor_device_request.kpi_id.kpi_id.uuid  = request.kpi_id.kpi_id.uuid
-            monitor_device_request.sampling_duration_s = request.sampling_duration_s
-            monitor_device_request.sampling_interval_s = request.sampling_interval_s
+            monitor_device_request.sampling_duration_s = request.monitoring_window_s
+            monitor_device_request.sampling_interval_s = request.sampling_rate_s
 
             device_client = DeviceClient()
             device_client.MonitorDeviceKpi(monitor_device_request)
@@ -106,10 +143,10 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService
             grpc_context.abort(grpc.StatusCode.INTERNAL, str(e))
             # CREATEKPI_COUNTER_FAILED.inc()
 
-        return context_pb2.Empty()
+        return Empty()
 
     # rpc IncludeKpi(IncludeKpiRequest)  returns(context.Empty)    {}
-    def IncludeKpi(self, request : monitoring_pb2.Kpi, grpc_context : grpc.ServicerContext) -> context_pb2.Empty:
+    def IncludeKpi(self, request : Kpi, grpc_context : grpc.ServicerContext) -> Empty:
 
         LOGGER.info('IncludeKpi')
 
@@ -117,18 +154,18 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService
             kpiDescriptor = self.GetKpiDescriptor(request.kpi_id, grpc_context)
             if kpiDescriptor is None:
                 LOGGER.warning('Ignoring sample with KPIId({:s}): not found in database'.format(str(request.kpi_id)))
-                return context_pb2.Empty()
+                return Empty()
 
             kpiSampleType   = KpiSampleType.Name(kpiDescriptor.kpi_sample_type).upper().replace('KPISAMPLETYPE_', '')
             kpiId           = request.kpi_id.kpi_id.uuid
             deviceId        = kpiDescriptor.device_id.device_uuid.uuid
             endpointId      = kpiDescriptor.endpoint_id.endpoint_uuid.uuid
             serviceId       = kpiDescriptor.service_id.service_uuid.uuid
-            time_stamp      = request.timestamp
+            time_stamp      = timestamp_float_to_string(request.timestamp.timestamp)
             kpi_value       = getattr(request.kpi_value, request.kpi_value.WhichOneof('value'))
 
-            # Build the structure to be included as point in the influxDB
-            self.influx_db.write_KPI(time_stamp,kpiId,kpiSampleType,deviceId,endpointId,serviceId,kpi_value)
+            # Build the structure to be included as point in the MetricsDB
+            self.metrics_db.write_KPI(time_stamp,kpiId,kpiSampleType,deviceId,endpointId,serviceId,kpi_value)
 
             #self.influx_db.read_KPI_points()
 
@@ -139,23 +176,21 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService
         except Exception:  # pragma: no cover
             LOGGER.exception('IncludeKpi exception')
             # CREATEKPI_COUNTER_FAILED.inc()
-        return context_pb2.Empty()
-
-    def GetStreamKpi ( self, request, grpc_context : grpc.ServicerContext):
-        # receives monitoring.KpiId returns stream monitoring.Kpi
-        LOGGER.info('GetStreamKpi')
-        yield monitoring_pb2.Kpi()
+        return Empty()
 
-    @MONITORING_GETINSTANTKPI_REQUEST_TIME.time()
-    def GetInstantKpi ( self, request, grpc_context : grpc.ServicerContext):
-        # receives monitoring.KpiId returns monitoring.Kpi
-        LOGGER.info('GetInstantKpi')
-        return monitoring_pb2.Kpi()
+    # def GetStreamKpi ( self, request, grpc_context : grpc.ServicerContext):
+    #
+    #     LOGGER.info('GetStreamKpi')
+    #     yield monitoring_pb2.Kpi()
+    #
+    # @MONITORING_GETINSTANTKPI_REQUEST_TIME.time()
+    # def GetInstantKpi ( self, request, grpc_context : grpc.ServicerContext):
+    #
+    #     LOGGER.info('GetInstantKpi')
+    #     return monitoring_pb2.Kpi()
 
 
-    def GetKpiDescriptor(
-        self, request : monitoring_pb2.KpiId, grpc_context : grpc.ServicerContext
-    ) -> monitoring_pb2.KpiDescriptor:
+    def GetKpiDescriptor(self, request : KpiId, grpc_context : grpc.ServicerContext) -> KpiDescriptor:
         LOGGER.info('getting Kpi by KpiID')
         try:
             kpi_db = self.sql_db.get_KPI(int(request.kpi_id.uuid))
@@ -163,7 +198,7 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService
             #LOGGER.info('kpi_db={:s}'.format(str(kpi_db)))
             if kpi_db is None: return None
 
-            kpiDescriptor = monitoring_pb2.KpiDescriptor()
+            kpiDescriptor = KpiDescriptor()
 
             kpiDescriptor.kpi_description                   = kpi_db[1]
             kpiDescriptor.kpi_sample_type                   = kpi_db[2]
@@ -178,3 +213,125 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService
 
         except Exception:  # pragma: no cover
             LOGGER.exception('GetKpiDescriptor exception')
+
+    def QueryKpiData ( self, request : KpiQuery, grpc_context : grpc.ServicerContext) -> KpiList:
+
+        LOGGER.info('QueryKpiData')
+        try:
+             # TBC
+            return KpiQuery()
+        except ServiceException as e:
+            LOGGER.exception('QueryKpiData exception')
+            grpc_context.abort(e.code, e.details)
+        except Exception as e:  # pragma: no cover
+            LOGGER.exception('QueryKpiData exception')
+
+    def SubscribeKpi ( self, request : SubsDescriptor, grpc_context : grpc.ServicerContext) -> KpiList:
+
+        LOGGER.info('SubscribeKpi')
+        try:
+             # TBC
+            yield KpiList()
+        except ServiceException as e:
+            LOGGER.exception('SubscribeKpi exception')
+            grpc_context.abort(e.code, e.details)
+        except Exception as e:  # pragma: no cover
+            LOGGER.exception('SubscribeKpi exception')
+
+
+    def GetSubsDescriptor ( self, request : SubscriptionID, grpc_context : grpc.ServicerContext) -> SubsDescriptor:
+
+        LOGGER.info('GetSubsDescriptor')
+        try:
+             # TBC
+            return SubsDescriptor()
+        except ServiceException as e:
+            LOGGER.exception('GetSubsDescriptor exception')
+            grpc_context.abort(e.code, e.details)
+        except Exception as e:  # pragma: no cover
+            LOGGER.exception('GetSubsDescriptor exception')
+
+    def GetSubscriptions ( self, request : Empty, grpc_context : grpc.ServicerContext) -> SubsIDList:
+
+        LOGGER.info('GetSubscriptions')
+        try:
+             # TBC
+            return SubsIDList()
+        except ServiceException as e:
+            LOGGER.exception('GetSubscriptions exception')
+            grpc_context.abort(e.code, e.details)
+        except Exception as e:  # pragma: no cover
+            LOGGER.exception('GetSubscriptions exception')
+
+    def DeleteSubscription ( self, request : SubscriptionID, grpc_context : grpc.ServicerContext) -> Empty:
+
+        LOGGER.info('DeleteSubscription')
+        try:
+             # TBC
+            return Empty()
+        except ServiceException as e:
+            LOGGER.exception('DeleteSubscription exception')
+            grpc_context.abort(e.code, e.details)
+        except Exception as e:  # pragma: no cover
+            LOGGER.exception('DeleteSubscription exception')
+
+    def SetKpiAlarm ( self, request : AlarmDescriptor, grpc_context : grpc.ServicerContext) -> AlarmResponse:
+
+        LOGGER.info('SetKpiAlarm')
+        try:
+             # TBC
+            return AlarmResponse()
+        except ServiceException as e:
+            LOGGER.exception('SetKpiAlarm exception')
+            grpc_context.abort(e.code, e.details)
+        except Exception as e:  # pragma: no cover
+            LOGGER.exception('SetKpiAlarm exception')
+
+
+    def GetAlarms ( self, request : Empty, grpc_context : grpc.ServicerContext) -> AlarmIDList:
+
+        LOGGER.info('GetAlarms')
+        try:
+             # TBC
+            return AlarmIDList()
+        except ServiceException as e:
+            LOGGER.exception('GetAlarms exception')
+            grpc_context.abort(e.code, e.details)
+        except Exception as e:  # pragma: no cover
+            LOGGER.exception('GetAlarms exception')
+
+    def GetAlarmDescriptor ( self, request : AlarmID, grpc_context : grpc.ServicerContext) -> AlarmDescriptor:
+
+        LOGGER.info('GetAlarmDescriptor')
+        try:
+             # TBC
+            return AlarmDescriptor()
+        except ServiceException as e:
+            LOGGER.exception('GetAlarmDescriptor exception')
+            grpc_context.abort(e.code, e.details)
+        except Exception as e:  # pragma: no cover
+            LOGGER.exception('GetAlarmDescriptor exception')
+
+    def GetAlarmResponseStream(self, request : AlarmSubscription, grpc_context : grpc.ServicerContext) -> Iterator[AlarmResponse]:
+
+        LOGGER.info('GetAlarmResponseStream')
+        try:
+            # TBC
+            yield AlarmResponse()
+        except ServiceException as e:
+            LOGGER.exception('GetAlarmResponseStream exception')
+            grpc_context.abort(e.code, e.details)
+        except Exception as e:  # pragma: no cover
+            LOGGER.exception('GetAlarmResponseStream exception')
+
+    def DeleteAlarm ( self, request : AlarmID, grpc_context : grpc.ServicerContext) -> Empty:
+
+        LOGGER.info('DeleteAlarm')
+        try:
+             # TBC
+            return Empty()
+        except ServiceException as e:
+            LOGGER.exception('DeleteAlarm exception')
+            grpc_context.abort(e.code, e.details)
+        except Exception as e:  # pragma: no cover
+            LOGGER.exception('DeleteAlarm exception')
diff --git a/src/monitoring/tests/Messages.py b/src/monitoring/tests/Messages.py
index 94fcc78c1a408f21e1b16316237560e329cb78b9..7b7f4150e5c084bbf25c6a4d9c1c47b70e3f76a0 100644
--- a/src/monitoring/tests/Messages.py
+++ b/src/monitoring/tests/Messages.py
@@ -14,6 +14,8 @@
 
 from common.proto import monitoring_pb2
 from common.proto.kpi_sample_types_pb2 import KpiSampleType
+from common.tools.timestamp.Converters import timestamp_string_to_float
+
 
 def kpi():
     _kpi                    = monitoring_pb2.Kpi()
@@ -34,16 +36,16 @@ def create_kpi_request():
     _create_kpi_request.endpoint_id.endpoint_uuid.uuid = 'END1'     # pylint: disable=maybe-no-member
     return _create_kpi_request
 
-def monitor_kpi_request(kpi_uuid, sampling_duration_s, sampling_interval_s):
+def monitor_kpi_request(kpi_uuid, monitoring_window_s, sampling_rate_s):
     _monitor_kpi_request                     = monitoring_pb2.MonitorKpiRequest()
     _monitor_kpi_request.kpi_id.kpi_id.uuid  = kpi_uuid   # pylint: disable=maybe-no-member
-    _monitor_kpi_request.sampling_duration_s = sampling_duration_s
-    _monitor_kpi_request.sampling_interval_s = sampling_interval_s
+    _monitor_kpi_request.monitoring_window_s = monitoring_window_s
+    _monitor_kpi_request.sampling_rate_s     = sampling_rate_s
     return _monitor_kpi_request
 
 def include_kpi_request():
-    _include_kpi_request                    = monitoring_pb2.Kpi()
-    _include_kpi_request.kpi_id.kpi_id.uuid = str(1)    # pylint: disable=maybe-no-member
-    _include_kpi_request.timestamp          = "2021-10-12T13:14:42Z"
-    _include_kpi_request.kpi_value.intVal   = 500       # pylint: disable=maybe-no-member
+    _include_kpi_request                        = monitoring_pb2.Kpi()
+    _include_kpi_request.kpi_id.kpi_id.uuid     = str(1)    # pylint: disable=maybe-no-member
+    _include_kpi_request.timestamp.timestamp    = timestamp_string_to_float("2021-10-12T13:14:42Z")
+    _include_kpi_request.kpi_value.int32Val       = 500       # pylint: disable=maybe-no-member
     return _include_kpi_request
diff --git a/src/monitoring/tests/test_unitary.py b/src/monitoring/tests/test_unitary.py
index ee7d6f51eb81bbe1c6a7b005f1e02108d14bc65e..f8b4d59bdf61b6897da36258496eb5be7faaf8a2 100644
--- a/src/monitoring/tests/test_unitary.py
+++ b/src/monitoring/tests/test_unitary.py
@@ -13,6 +13,7 @@
 # limitations under the License.
 
 import copy, logging, os, pytest
+from time import sleep
 from typing import Tuple
 from common.Constants import ServiceNameEnum
 from common.Settings import (
@@ -21,10 +22,11 @@ from common.orm.Database import Database
 from common.orm.Factory import get_database_backend, BackendEnum as DatabaseBackendEnum
 from common.message_broker.Factory import get_messagebroker_backend, BackendEnum as MessageBrokerBackendEnum
 from common.message_broker.MessageBroker import MessageBroker
+from common.proto.monitoring_pb2 import KpiId, KpiDescriptor
 
 from context.client.ContextClient import ContextClient
 from context.service.grpc_server.ContextService import ContextService
-from common.proto.context_pb2 import EventTypeEnum, DeviceEvent, Device
+from common.proto.context_pb2 import EventTypeEnum, DeviceEvent, Device, Empty
 
 from device.client.DeviceClient import DeviceClient
 from device.service.DeviceService import DeviceService
@@ -35,7 +37,7 @@ from device.service.drivers import DRIVERS
 from monitoring.client.MonitoringClient import MonitoringClient
 from common.proto import context_pb2, monitoring_pb2
 from common.proto.kpi_sample_types_pb2 import KpiSampleType
-from monitoring.service import SqliteTools, InfluxTools
+from monitoring.service import SqliteTools, MetricsDBTools
 from monitoring.service.MonitoringService import MonitoringService
 from monitoring.service.EventTools import EventsDeviceCollector
 from monitoring.tests.Messages import create_kpi_request, include_kpi_request, kpi, kpi_id, monitor_kpi_request
@@ -63,11 +65,11 @@ MONITORING_SERVICE_PORT = 10000 + get_service_port_grpc(ServiceNameEnum.MONITORI
 os.environ[get_env_var_name(ServiceNameEnum.MONITORING, ENVVAR_SUFIX_SERVICE_HOST     )] = str(LOCAL_HOST)
 os.environ[get_env_var_name(ServiceNameEnum.MONITORING, ENVVAR_SUFIX_SERVICE_PORT_GRPC)] = str(MONITORING_SERVICE_PORT)
 
-INFLUXDB_HOSTNAME = os.environ.get("INFLUXDB_HOSTNAME")
-INFLUXDB_PORT = os.environ.get("INFLUXDB_PORT")
-INFLUXDB_USER = os.environ.get("INFLUXDB_USER")
-INFLUXDB_PASSWORD = os.environ.get("INFLUXDB_PASSWORD")
-INFLUXDB_DATABASE = os.environ.get("INFLUXDB_DATABASE")
+METRICSDB_HOSTNAME = os.environ.get("METRICSDB_HOSTNAME")
+METRICSDB_ILP_PORT = os.environ.get("METRICSDB_ILP_PORT")
+METRICSDB_REST_PORT = os.environ.get("METRICSDB_REST_PORT")
+METRICSDB_TABLE = os.environ.get("METRICSDB_TABLE")
+
 
 @pytest.fixture(scope='session')
 def context_db_mb() -> Tuple[Database, MessageBroker]:
@@ -149,10 +151,11 @@ def sql_db():
     return _sql_db
 
 @pytest.fixture(scope='session')
-def influx_db():
-    _influx_db = InfluxTools.Influx(
-        INFLUXDB_HOSTNAME, INFLUXDB_PORT, INFLUXDB_USER, INFLUXDB_PASSWORD, INFLUXDB_DATABASE)
-    return _influx_db
+def metrics_db():
+    _metrics_db = MetricsDBTools.MetricsDB(
+        METRICSDB_HOSTNAME, METRICSDB_ILP_PORT, METRICSDB_REST_PORT, METRICSDB_TABLE)
+    return _metrics_db
+
 
 
 ###########################
@@ -160,12 +163,12 @@ def influx_db():
 ###########################
 
 # Test case that makes use of client fixture to test server's CreateKpi method
-def test_create_kpi(monitoring_client): # pylint: disable=redefined-outer-name
+def test_set_kpi(monitoring_client): # pylint: disable=redefined-outer-name
     # make call to server
     LOGGER.warning('test_create_kpi requesting')
-    response = monitoring_client.CreateKpi(create_kpi_request())
+    response = monitoring_client.SetKpi(create_kpi_request())
     LOGGER.debug(str(response))
-    assert isinstance(response, monitoring_pb2.KpiId)
+    assert isinstance(response, KpiId)
 
 # Test case that makes use of client fixture to test server's MonitorKpi method
 def test_monitor_kpi(
@@ -196,11 +199,11 @@ def test_monitor_kpi(
     response = device_client.AddDevice(Device(**device_with_connect_rules))
     assert response.device_uuid.uuid == DEVICE_DEV1_UUID
 
-    response = monitoring_client.CreateKpi(create_kpi_request())
+    response = monitoring_client.SetKpi(create_kpi_request())
     _monitor_kpi_request = monitor_kpi_request(response.kpi_id.uuid, 120, 5) # pylint: disable=maybe-no-member
     response = monitoring_client.MonitorKpi(_monitor_kpi_request)
     LOGGER.debug(str(response))
-    assert isinstance(response, context_pb2.Empty)
+    assert isinstance(response, Empty)
 
 
 # Test case that makes use of client fixture to test server's IncludeKpi method
@@ -209,29 +212,29 @@ def test_include_kpi(monitoring_client): # pylint: disable=redefined-outer-name
     LOGGER.warning('test_include_kpi requesting')
     response = monitoring_client.IncludeKpi(include_kpi_request())
     LOGGER.debug(str(response))
-    assert isinstance(response, context_pb2.Empty)
+    assert isinstance(response, Empty)
 
 # Test case that makes use of client fixture to test server's GetStreamKpi method
 def test_get_stream_kpi(monitoring_client): # pylint: disable=redefined-outer-name
     LOGGER.warning('test_getstream_kpi begin')
     response = monitoring_client.GetStreamKpi(kpi())
     LOGGER.debug(str(response))
-    #assert isinstance(response, monitoring_pb2.Kpi)
+    #assert isinstance(response, Kpi)
 
 # Test case that makes use of client fixture to test server's GetInstantKpi method
-def test_get_instant_kpi(monitoring_client): # pylint: disable=redefined-outer-name
-    LOGGER.warning('test_getinstant_kpi begin')
-    response = monitoring_client.GetInstantKpi(kpi_id())
-    LOGGER.debug(str(response))
-    assert isinstance(response, monitoring_pb2.Kpi)
+# def test_get_instant_kpi(monitoring_client): # pylint: disable=redefined-outer-name
+#     LOGGER.warning('test_getinstant_kpi begin')
+#     response = monitoring_client.GetInstantKpi(kpi_id())
+#     LOGGER.debug(str(response))
+#     # assert isinstance(response, Kpi)
 
 # Test case that makes use of client fixture to test server's GetInstantKpi method
 def test_get_kpidescritor_kpi(monitoring_client): # pylint: disable=redefined-outer-name
     LOGGER.warning('test_getkpidescritor_kpi begin')
-    response = monitoring_client.CreateKpi(create_kpi_request())
+    response = monitoring_client.SetKpi(create_kpi_request())
     response = monitoring_client.GetKpiDescriptor(response)
     LOGGER.debug(str(response))
-    assert isinstance(response, monitoring_pb2.KpiDescriptor)
+    assert isinstance(response, KpiDescriptor)
 
 def test_sqlitedb_tools_insert_kpi(sql_db): # pylint: disable=redefined-outer-name
     LOGGER.warning('test_sqlitedb_tools_insert_kpi begin')
@@ -300,11 +303,13 @@ def test_sqlitedb_tools_delete_kpid_id(sql_db): # pylint: disable=redefined-oute
     assert response
 
 
-def test_influxdb_tools_write_kpi(influx_db): # pylint: disable=redefined-outer-name
-    LOGGER.warning('test_influxdb_tools_write_kpi begin')
+def test_metrics_db_tools_write_kpi(metrics_db): # pylint: disable=redefined-outer-name
+    LOGGER.warning('test_metric_sdb_tools_write_kpi begin')
+
+
+def test_metrics_db_tools_read_kpi_points(metrics_db): # pylint: disable=redefined-outer-name
+    LOGGER.warning('test_metrics_db_tools_read_kpi_points begin')
 
-def test_influxdb_tools_read_kpi_points(influx_db): # pylint: disable=redefined-outer-name
-    LOGGER.warning('test_influxdb_tools_read_kpi_points begin')
 
 
 def test_events_tools(
@@ -414,6 +419,9 @@ def test_listen_events(
     response = device_client.AddDevice(Device(**device_with_connect_rules))
     assert response.device_uuid.uuid == DEVICE_DEV1_UUID
 
+    sleep(0.1)
+
     kpi_id_list = events_collector.listen_events()
 
     assert len(kpi_id_list) > 0
+    events_collector.stop()
diff --git a/src/policy/src/main/java/eu/teraflow/policy/Serializer.java b/src/policy/src/main/java/eu/teraflow/policy/Serializer.java
index 9e536450873fe9d6e31f66dd71088ae401fce64e..35b6e2fd8cebf544d3f4b0f56fffbf4572f1de2b 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/Serializer.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/Serializer.java
@@ -23,6 +23,7 @@ import context.ContextOuterClass.ConfigRule_Custom;
 import context.ContextOuterClass.ContextId;
 import context.ContextOuterClass.DeviceId;
 import context.ContextOuterClass.DeviceOperationalStatusEnum;
+import context.ContextOuterClass.Location.LocationCase;
 import context.ContextOuterClass.Uuid;
 import eu.teraflow.policy.acl.AclAction;
 import eu.teraflow.policy.acl.AclEntry;
@@ -750,22 +751,25 @@ public class Serializer {
             ConstraintSlaIsolationLevel constraintSlaIsolationLevel) {
         final var builder = ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder();
 
-        final var isolationLevelEnum = constraintSlaIsolationLevel.getIsolationLevelEnum();
+        final var isolationLevelEnums = constraintSlaIsolationLevel.getIsolationLevelEnums();
 
-        final var serializedIsolationLevelEnum = serialize(isolationLevelEnum);
+        final var serializedIsolationLevelEnums =
+                isolationLevelEnums.stream().map(this::serialize).collect(Collectors.toList());
 
-        builder.setIsolationLevel(serializedIsolationLevelEnum);
+        builder.addAllIsolationLevel(serializedIsolationLevelEnums);
 
         return builder.build();
     }
 
     public ConstraintSlaIsolationLevel deserialize(
             ContextOuterClass.Constraint_SLA_Isolation_level serializedConstraintIsolationLevel) {
-        final var serializedIsolationLevelEnum = serializedConstraintIsolationLevel.getIsolationLevel();
+        final var serializedIsolationLevelEnums =
+                serializedConstraintIsolationLevel.getIsolationLevelList();
 
-        final var isolationLevelEnum = deserialize(serializedIsolationLevelEnum);
+        final var isolationLevelEnums =
+                serializedIsolationLevelEnums.stream().map(this::deserialize).collect(Collectors.toList());
 
-        return new ConstraintSlaIsolationLevel(isolationLevelEnum);
+        return new ConstraintSlaIsolationLevel(isolationLevelEnums);
     }
 
     public ContextOuterClass.Constraint_SLA_Latency serialize(
@@ -866,13 +870,14 @@ public class Serializer {
         }
 
         if (constraintTypeSpecificType instanceof ConstraintSlaIsolationLevel) {
-            final var isolationLevelEnum =
-                    ((ConstraintSlaIsolationLevel) constraintTypeSpecificType).getIsolationLevelEnum();
+            final var isolationLevelEnums =
+                    ((ConstraintSlaIsolationLevel) constraintTypeSpecificType).getIsolationLevelEnums();
 
-            final var serializedIsolationLevelEnum = serialize(isolationLevelEnum);
+            final var serializedIsolationLevelEnums =
+                    isolationLevelEnums.stream().map(this::serialize).collect(Collectors.toList());
             final var serializedConstraintSlaIsolationLevel =
                     ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder()
-                            .setIsolationLevel(serializedIsolationLevelEnum)
+                            .addAllIsolationLevel(serializedIsolationLevelEnums)
                             .build();
 
             builder.setSlaIsolation(serializedConstraintSlaIsolationLevel);
@@ -956,11 +961,14 @@ public class Serializer {
                 return new Constraint(constraintTypeSlaAvailability);
             case SLA_ISOLATION:
                 final var serializedConstrainSlaIsolation = serializedConstraint.getSlaIsolation();
-                final var serializedIsolationLevelEnum =
-                        serializedConstrainSlaIsolation.getIsolationLevel();
-
-                final var isolationLevelEnum = deserialize(serializedIsolationLevelEnum);
-                final var constraintSlaIsolation = new ConstraintSlaIsolationLevel(isolationLevelEnum);
+                final var serializedIsolationLevelEnums =
+                        serializedConstrainSlaIsolation.getIsolationLevelList();
+
+                final var isolationLevelEnums =
+                        serializedIsolationLevelEnums.stream()
+                                .map(this::deserialize)
+                                .collect(Collectors.toList());
+                final var constraintSlaIsolation = new ConstraintSlaIsolationLevel(isolationLevelEnums);
                 final var constraintTypeSlaIsolation =
                         new ConstraintTypeSlaIsolationLevel(constraintSlaIsolation);
 
@@ -2109,12 +2117,14 @@ public class Serializer {
         final var serializedEndPointId = serialize(endPointId);
         final var serializedKpiSampleTypes =
                 kpiSampleTypes.stream().map(this::serialize).collect(Collectors.toList());
-        final var serializedEndPointLocation = serialize(endPointLocation);
+        if (endPointLocation != null) {
+            final var serializedEndPointLocation = serialize(endPointLocation);
+            builder.setEndpointLocation(serializedEndPointLocation);
+        }
 
         builder.setEndpointId(serializedEndPointId);
         builder.setEndpointType(endPointType);
         builder.addAllKpiSampleTypes(serializedKpiSampleTypes);
-        builder.setEndpointLocation(serializedEndPointLocation);
 
         return builder.build();
     }
@@ -2128,9 +2138,15 @@ public class Serializer {
         final var endPointId = deserialize(serializedEndPointId);
         final var kpiSampleTypes =
                 serializedKpiSampleTypes.stream().map(this::deserialize).collect(Collectors.toList());
-        final var endPointLocation = deserialize(serializedEndPointLocation);
 
-        return new EndPoint(endPointId, endPointType, kpiSampleTypes, endPointLocation);
+        if (serializedEndPointLocation.getLocationCase() != LocationCase.LOCATION_NOT_SET) {
+            final var endPointLocation = deserialize(serializedEndPointLocation);
+            return new EndPoint.EndPointBuilder(endPointId, endPointType, kpiSampleTypes)
+                    .location(endPointLocation)
+                    .build();
+        }
+
+        return new EndPoint.EndPointBuilder(endPointId, endPointType, kpiSampleTypes).build();
     }
 
     public ContextOuterClass.Device serialize(Device device) {
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSlaIsolationLevel.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSlaIsolationLevel.java
index adb55bff458c49c9189cd10b19d905dd865758d7..d965e2f420479f6a0922a13f04c67db724b53924 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSlaIsolationLevel.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSlaIsolationLevel.java
@@ -16,22 +16,25 @@
 
 package eu.teraflow.policy.context.model;
 
+import eu.teraflow.policy.common.Util;
+import java.util.List;
+
 public class ConstraintSlaIsolationLevel {
 
-    private final IsolationLevelEnum isolationLevelEnum;
+    private final List<IsolationLevelEnum> isolationLevelEnums;
 
-    public ConstraintSlaIsolationLevel(IsolationLevelEnum isolationLevelEnum) {
-        this.isolationLevelEnum = isolationLevelEnum;
+    public ConstraintSlaIsolationLevel(List<IsolationLevelEnum> isolationLevelEnums) {
+        this.isolationLevelEnums = isolationLevelEnums;
     }
 
-    public IsolationLevelEnum getIsolationLevelEnum() {
-        return isolationLevelEnum;
+    public List<IsolationLevelEnum> getIsolationLevelEnums() {
+        return isolationLevelEnums;
     }
 
     @Override
     public String toString() {
         return String.format(
-                "%s:{isolationLevelEnum:\"%s\"}",
-                getClass().getSimpleName(), isolationLevelEnum.toString());
+                "%s:{isolationLevelEnums:\"%s\"}",
+                getClass().getSimpleName(), Util.toString(isolationLevelEnums));
     }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/EndPoint.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/EndPoint.java
index a657b59218598c375cfe272f6d3dc1b2ed5bdd04..b40952b85a39226738e03261be0084acd0155b22 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/context/model/EndPoint.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/EndPoint.java
@@ -26,15 +26,11 @@ public class EndPoint {
     private final List<KpiSampleType> kpiSampleTypes;
     private final Location endPointLocation;
 
-    public EndPoint(
-            EndPointId endPointId,
-            String endPointType,
-            List<KpiSampleType> kpiSampleTypes,
-            Location endPointLocation) {
-        this.endPointId = endPointId;
-        this.endPointType = endPointType;
-        this.kpiSampleTypes = kpiSampleTypes;
-        this.endPointLocation = endPointLocation;
+    EndPoint(EndPointBuilder builder) {
+        this.endPointId = builder.endPointId;
+        this.endPointType = builder.endPointType;
+        this.kpiSampleTypes = builder.kpiSampleTypes;
+        this.endPointLocation = builder.endPointLocation;
     }
 
     public EndPointId getEndPointId() {
@@ -63,4 +59,47 @@ public class EndPoint {
                 Util.toString(kpiSampleTypes),
                 endPointLocation);
     }
+
+    public static class EndPointBuilder {
+        private final EndPointId endPointId;
+        private final String endPointType;
+        private final List<KpiSampleType> kpiSampleTypes;
+        private Location endPointLocation;
+
+        public EndPointBuilder(
+                EndPointId endPointId, String endPointType, List<KpiSampleType> kpiSampleTypes) {
+            this.endPointId = endPointId;
+            this.endPointType = endPointType;
+            this.kpiSampleTypes = kpiSampleTypes;
+        }
+
+        public EndPointBuilder location(Location endPointLocation) {
+            this.endPointLocation = endPointLocation;
+            return this;
+        }
+
+        public EndPoint build() {
+            EndPoint endPoint = new EndPoint(this);
+            validateEndPointObject(endPoint);
+            return endPoint;
+        }
+
+        private void validateEndPointObject(EndPoint endPoint) {
+            final var validatedEndPointId = endPoint.getEndPointId();
+            final var validatedEndPointType = endPoint.getEndPointType();
+            final var validatedKpiSampleTypes = endPoint.getKpiSampleTypes();
+
+            if (validatedEndPointId == null) {
+                throw new IllegalStateException("EndPoint ID cannot be null");
+            }
+
+            if (validatedEndPointType == null) {
+                throw new IllegalStateException("EndPoint type cannot be null");
+            }
+
+            if (validatedKpiSampleTypes == null) {
+                throw new IllegalStateException("Kpi sample types cannot be null");
+            }
+        }
+    }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleCondition.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleCondition.java
index df92c5c1af8a5bf47df980dcea4db1d2309351b4..e835a818846a1cb87e1accc66a90ff2fa4c51b30 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleCondition.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleCondition.java
@@ -16,6 +16,9 @@
 
 package eu.teraflow.policy.model;
 
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
 import eu.teraflow.policy.monitoring.model.KpiValue;
 
 public class PolicyRuleCondition {
@@ -26,8 +29,18 @@ public class PolicyRuleCondition {
 
     public PolicyRuleCondition(
             String kpiId, NumericalOperator numericalOperator, KpiValue<?> kpiValue) {
+        checkNotNull(kpiId, "Kpi ID must not be null.");
+        checkArgument(!kpiId.isBlank(), "Kpi ID must not be empty.");
         this.kpiId = kpiId;
+        checkArgument(
+                numericalOperator != NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_UNDEFINED,
+                "Numerical operator cannot be undefined");
         this.numericalOperator = numericalOperator;
+        checkNotNull(kpiValue, "Kpi value must not be null.");
+        checkArgument(
+                isKpiValueValid(kpiValue),
+                "Kpi value must be: String, Float, Boolean or Integer but it was [%s].",
+                kpiValue.getValue().getClass().getName());
         this.kpiValue = kpiValue;
     }
 
@@ -43,6 +56,24 @@ public class PolicyRuleCondition {
         return kpiValue;
     }
 
+    private boolean isKpiValueValid(KpiValue<?> kpiValue) {
+        final var kpiValueType = kpiValue.getValue();
+
+        if (kpiValueType instanceof String) {
+            return true;
+        }
+
+        if (kpiValueType instanceof Boolean) {
+            return true;
+        }
+
+        if (kpiValueType instanceof Integer) {
+            return true;
+        }
+
+        return kpiValueType instanceof Float;
+    }
+
     @Override
     public String toString() {
         return String.format(
diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleDevice.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleDevice.java
index 46151ea5c50f5b2f1b6542098594813e5cbc2a50..6dbbe2e00949ca1cfbb00f2db4b2aa01981417c3 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleDevice.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleDevice.java
@@ -16,6 +16,9 @@
 
 package eu.teraflow.policy.model;
 
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
 import eu.teraflow.policy.common.Util;
 import java.util.List;
 
@@ -25,7 +28,10 @@ public class PolicyRuleDevice {
     private final List<String> deviceIds;
 
     public PolicyRuleDevice(PolicyRuleBasic policyRuleBasic, List<String> deviceIds) {
+        checkNotNull(policyRuleBasic, "PolicyRuleBasic must not be null.");
         this.policyRuleBasic = policyRuleBasic;
+        checkNotNull(deviceIds, "Device Ids must not be null.");
+        checkArgument(!deviceIds.isEmpty(), "Device Ids must not be empty.");
         this.deviceIds = deviceIds;
     }
 
diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleService.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleService.java
index ac0710d8590153ef8df1e9dbeb6465eac88c3fa1..fcdfffdb64ae68738adca5e417f7e852902c544b 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleService.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleService.java
@@ -16,6 +16,8 @@
 
 package eu.teraflow.policy.model;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 import eu.teraflow.policy.common.Util;
 import eu.teraflow.policy.context.model.ServiceId;
 import java.util.List;
@@ -28,8 +30,11 @@ public class PolicyRuleService {
 
     public PolicyRuleService(
             PolicyRuleBasic policyRuleBasic, ServiceId serviceId, List<String> deviceIds) {
+        checkNotNull(policyRuleBasic, "PolicyRuleBasic must not be null.");
         this.policyRuleBasic = policyRuleBasic;
+        checkNotNull(serviceId, "Service Id must not be null.");
         this.serviceId = serviceId;
+        checkNotNull(deviceIds, "Device Ids must not be null.");
         this.deviceIds = deviceIds;
     }
 
diff --git a/src/policy/src/test/java/eu/teraflow/policy/ConstraintTypeTest.java b/src/policy/src/test/java/eu/teraflow/policy/ConstraintTypeTest.java
index 71d44bd3182200f456a9f9d0cb5f02ad0b222d3f..6389a359974c0accf6b248de5a43367a553c13d9 100644
--- a/src/policy/src/test/java/eu/teraflow/policy/ConstraintTypeTest.java
+++ b/src/policy/src/test/java/eu/teraflow/policy/ConstraintTypeTest.java
@@ -38,6 +38,7 @@ import eu.teraflow.policy.context.model.Location;
 import eu.teraflow.policy.context.model.LocationTypeRegion;
 import eu.teraflow.policy.context.model.TopologyId;
 import io.quarkus.test.junit.QuarkusTest;
+import java.util.List;
 import org.junit.jupiter.api.Test;
 
 @QuarkusTest
@@ -113,7 +114,8 @@ class ConstraintTypeTest {
     @Test
     void shouldExtractConstraintSlaIsolationLevelFromConstraintTypeSlaIsolationLevel() {
         final var expectedConstraintSlaIsolationLevel =
-                new ConstraintSlaIsolationLevel(IsolationLevelEnum.PHYSICAL_ISOLATION);
+                new ConstraintSlaIsolationLevel(
+                        List.of(IsolationLevelEnum.PHYSICAL_ISOLATION, IsolationLevelEnum.LOGICAL_ISOLATION));
         final var constraintTypeSlaIsolationLevel =
                 new ConstraintTypeSlaIsolationLevel(expectedConstraintSlaIsolationLevel);
 
diff --git a/src/policy/src/test/java/eu/teraflow/policy/EndPointCreationTest.java b/src/policy/src/test/java/eu/teraflow/policy/EndPointCreationTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..4c113dc95fda5160959505bfc90c02c4bd39acf7
--- /dev/null
+++ b/src/policy/src/test/java/eu/teraflow/policy/EndPointCreationTest.java
@@ -0,0 +1,124 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
+
+import eu.teraflow.policy.context.model.EndPoint;
+import eu.teraflow.policy.context.model.EndPointId;
+import eu.teraflow.policy.context.model.Location;
+import eu.teraflow.policy.context.model.LocationTypeRegion;
+import eu.teraflow.policy.context.model.TopologyId;
+import eu.teraflow.policy.kpi_sample_types.model.KpiSampleType;
+import io.quarkus.test.junit.QuarkusTest;
+import java.util.List;
+import org.junit.jupiter.api.Test;
+
+@QuarkusTest
+class EndPointCreationTest {
+
+    @Test
+    void shouldCreateEndPointObjectGivenAllAvailableFields() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+
+        final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+        final var expectedEndPointType = "expectedEndPointType";
+        final var expectedKpiSampleTypes =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+
+        final var expectedLocationType = new LocationTypeRegion("ATH");
+        final var expectedEndPointLocation = new Location(expectedLocationType);
+
+        final var expectedEndPoint =
+                new EndPoint.EndPointBuilder(
+                                expectedEndPointId, expectedEndPointType, expectedKpiSampleTypes)
+                        .location(expectedEndPointLocation)
+                        .build();
+
+        assertThat(expectedEndPoint.getEndPointId()).isEqualTo(expectedEndPointId);
+        assertThat(expectedEndPoint.getEndPointType()).isEqualTo(expectedEndPointType);
+        assertThat(expectedEndPoint.getKpiSampleTypes()).isEqualTo(expectedKpiSampleTypes);
+        assertThat(expectedEndPoint.getEndPointLocation()).isEqualTo(expectedEndPointLocation);
+    }
+
+    @Test
+    void shouldCreateEndPointObjectGivenAllFieldsExceptFromLocation() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+
+        final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+        final var expectedEndPointType = "expectedEndPointType";
+        final var expectedKpiSampleTypes =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+
+        final var expectedEndPoint =
+                new EndPoint.EndPointBuilder(
+                                expectedEndPointId, expectedEndPointType, expectedKpiSampleTypes)
+                        .build();
+
+        assertThat(expectedEndPoint.getEndPointId()).isEqualTo(expectedEndPointId);
+        assertThat(expectedEndPoint.getEndPointType()).isEqualTo(expectedEndPointType);
+        assertThat(expectedEndPoint.getKpiSampleTypes()).isEqualTo(expectedKpiSampleTypes);
+    }
+
+    @Test
+    void shouldThrowIllegalStateExceptionDuringCreationOfEndPointObjectUponMissingEndPointId() {
+        final var expectedEndPointType = "expectedEndPointType";
+        final var expectedKpiSampleTypes =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+
+        final var endPoint =
+                new EndPoint.EndPointBuilder(null, expectedEndPointType, expectedKpiSampleTypes);
+
+        assertThatExceptionOfType(IllegalStateException.class).isThrownBy(endPoint::build);
+    }
+
+    @Test
+    void shouldThrowIllegalStateExceptionDuringCreationOfEndPointObjectUponMissingEndPointType() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+
+        final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+        final var expectedKpiSampleTypes =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+
+        final var endPoint =
+                new EndPoint.EndPointBuilder(expectedEndPointId, null, expectedKpiSampleTypes);
+
+        assertThatExceptionOfType(IllegalStateException.class).isThrownBy(endPoint::build);
+    }
+
+    @Test
+    void shouldThrowIllegalStateExceptionDuringCreationOfEndPointObjectUponMissingKpiSampleTypes() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+
+        final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+        final var expectedEndPointType = "expectedEndPointType";
+
+        final var endPoint =
+                new EndPoint.EndPointBuilder(expectedEndPointId, expectedEndPointType, null);
+
+        assertThatExceptionOfType(IllegalStateException.class).isThrownBy(endPoint::build);
+    }
+}
diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java
index 955ad2a62255155bee0ec7f8aa171d91410d8519..53cddf6bea05162a9ee046c528da0055a1f8b467 100644
--- a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java
+++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java
@@ -56,7 +56,7 @@ class PolicyRuleBasicValidationTest {
     }
 
     private List<PolicyRuleCondition> createPolicyRuleConditions(
-            String kpiId, NumericalOperator numericalOperator, KpiValue kpiValue) {
+            String kpiId, NumericalOperator numericalOperator, KpiValue<?> kpiValue) {
         final var policyRuleCondition = new PolicyRuleCondition(kpiId, numericalOperator, kpiValue);
 
         return List.of(policyRuleCondition);
@@ -70,7 +70,7 @@ class PolicyRuleBasicValidationTest {
     }
 
     @Test
-    void shouldThrowIllegalArgumentExceptionGivenNullPolicyRuleId() {
+    void shouldThrowNullPointerExceptionGivenNullPolicyRuleId() {
         final var policyRuleConditions =
                 createPolicyRuleConditions(
                         UUID.randomUUID().toString(),
diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleConditionValidationTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleConditionValidationTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..635876dcba59eef27273ff2bc24a7921991e2975
--- /dev/null
+++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleConditionValidationTest.java
@@ -0,0 +1,139 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
+
+import eu.teraflow.policy.model.NumericalOperator;
+import eu.teraflow.policy.model.PolicyRuleCondition;
+import eu.teraflow.policy.monitoring.model.BooleanKpiValue;
+import eu.teraflow.policy.monitoring.model.FloatKpiValue;
+import eu.teraflow.policy.monitoring.model.IntegerKpiValue;
+import eu.teraflow.policy.monitoring.model.KpiValue;
+import eu.teraflow.policy.monitoring.model.StringKpiValue;
+import io.quarkus.test.junit.QuarkusTest;
+import java.util.stream.Stream;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.mockito.Mockito;
+
+@QuarkusTest
+class PolicyRuleConditionValidationTest {
+
+    private PolicyRuleCondition createPolicyRuleCondition(
+            String kpiId, NumericalOperator numericalOperator, KpiValue<?> kpiValue) {
+
+        return new PolicyRuleCondition(kpiId, numericalOperator, kpiValue);
+    }
+
+    private static Stream<Arguments> provideKpiValues() {
+        return Stream.of(
+                Arguments.of(new StringKpiValue("stringKpiValue")),
+                Arguments.of(new BooleanKpiValue(true)),
+                Arguments.of(new IntegerKpiValue(44)),
+                Arguments.of(new FloatKpiValue(12.3f)));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideKpiValues")
+    void shouldThrowNullPointerExceptionGivenNullKpiId(KpiValue<?> kpiValue) {
+        assertThatExceptionOfType(NullPointerException.class)
+                .isThrownBy(
+                        () ->
+                                createPolicyRuleCondition(
+                                        null,
+                                        NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN,
+                                        kpiValue));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideKpiValues")
+    void shouldThrowIllegalArgumentExceptionGivenEmptyKpiId(KpiValue<?> kpiValue) {
+        assertThatExceptionOfType(IllegalArgumentException.class)
+                .isThrownBy(
+                        () ->
+                                createPolicyRuleCondition(
+                                        "", NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_NOT_EQUAL, kpiValue));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideKpiValues")
+    void shouldThrowIllegalArgumentExceptionGivenWhiteSpacedKpiId(KpiValue<?> kpiValue) {
+        assertThatExceptionOfType(IllegalArgumentException.class)
+                .isThrownBy(
+                        () ->
+                                createPolicyRuleCondition(
+                                        " ", NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_NOT_EQUAL, kpiValue));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideKpiValues")
+    void shouldThrowIllegalArgumentExceptionGivenUndefinedNumericalOperator(KpiValue<?> kpiValue) {
+        assertThatExceptionOfType(IllegalArgumentException.class)
+                .isThrownBy(
+                        () ->
+                                createPolicyRuleCondition(
+                                        "kpiId",
+                                        NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_UNDEFINED,
+                                        kpiValue));
+    }
+
+    @Test
+    void shouldThrowNullPointerExceptionGivenNullKpiValue() {
+        assertThatExceptionOfType(NullPointerException.class)
+                .isThrownBy(
+                        () ->
+                                createPolicyRuleCondition(
+                                        "kpiId", NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN, null));
+    }
+
+    @Test
+    void shouldThrowIllegalArgumentExceptionIfIsKpiValueIsOfInvalidType() {
+        final var kpiValue = Mockito.mock(KpiValue.class);
+        Mockito.when(kpiValue.getValue()).thenReturn(1_2L);
+
+        assertThatExceptionOfType(IllegalArgumentException.class)
+                .isThrownBy(
+                        () ->
+                                createPolicyRuleCondition(
+                                        "kpiId",
+                                        NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN,
+                                        kpiValue));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideKpiValues")
+    void shouldCreatePolicyRuleConditionObject(KpiValue<?> kpiValue) {
+        final var expectedKpiId = "expectedKpiId";
+        final var expectedNumericalOperator =
+                NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN;
+
+        final var expectedPolicyRuleCondition =
+                new PolicyRuleCondition(expectedKpiId, expectedNumericalOperator, kpiValue);
+
+        final var policyRuleCondition =
+                createPolicyRuleCondition(
+                        "expectedKpiId", NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN, kpiValue);
+
+        assertThat(policyRuleCondition)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedPolicyRuleCondition);
+    }
+}
diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleDeviceValidationTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleDeviceValidationTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..064cd7ee03a35d453f8de46d12c8f205f4ab804d
--- /dev/null
+++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleDeviceValidationTest.java
@@ -0,0 +1,178 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
+
+import eu.teraflow.policy.model.BooleanOperator;
+import eu.teraflow.policy.model.NumericalOperator;
+import eu.teraflow.policy.model.PolicyRuleAction;
+import eu.teraflow.policy.model.PolicyRuleActionEnum;
+import eu.teraflow.policy.model.PolicyRuleBasic;
+import eu.teraflow.policy.model.PolicyRuleCondition;
+import eu.teraflow.policy.model.PolicyRuleDevice;
+import eu.teraflow.policy.model.PolicyRuleState;
+import eu.teraflow.policy.model.RuleState;
+import eu.teraflow.policy.monitoring.model.IntegerKpiValue;
+import eu.teraflow.policy.monitoring.model.KpiValue;
+import io.quarkus.test.junit.QuarkusTest;
+import java.util.Collections;
+import java.util.List;
+import java.util.UUID;
+import org.junit.jupiter.api.Test;
+
+@QuarkusTest
+class PolicyRuleDeviceValidationTest {
+
+    private PolicyRuleBasic createPolicyRuleBasic(
+            String policyRuleId,
+            int priority,
+            PolicyRuleState policyRuleState,
+            BooleanOperator booleanOperator,
+            List<PolicyRuleCondition> policyRuleConditions,
+            List<PolicyRuleAction> policyRuleActions) {
+
+        return new PolicyRuleBasic(
+                policyRuleId,
+                policyRuleState,
+                priority,
+                policyRuleConditions,
+                booleanOperator,
+                policyRuleActions);
+    }
+
+    private List<PolicyRuleCondition> createPolicyRuleConditions(
+            String kpiId, NumericalOperator numericalOperator, KpiValue<?> kpiValue) {
+        final var policyRuleCondition = new PolicyRuleCondition(kpiId, numericalOperator, kpiValue);
+
+        return List.of(policyRuleCondition);
+    }
+
+    private List<PolicyRuleAction> createPolicyRuleActions(
+            PolicyRuleActionEnum policyRuleActionEnum, List<String> parameters) {
+        final var policyRuleAction = new PolicyRuleAction(policyRuleActionEnum, parameters);
+
+        return List.of(policyRuleAction);
+    }
+
+    private PolicyRuleDevice createPolicyRuleDevice(
+            PolicyRuleBasic policyRuleBasic, List<String> deviceIds) {
+
+        return new PolicyRuleDevice(policyRuleBasic, deviceIds);
+    }
+
+    private List<String> createDeviceIds() {
+        return List.of("deviceId1", "deviceId2");
+    }
+
+    @Test
+    void shouldThrowNullPointerExceptionGivenNullPolicyRuleBasic() {
+        final var deviceIds = createDeviceIds();
+
+        assertThatExceptionOfType(NullPointerException.class)
+                .isThrownBy(() -> createPolicyRuleDevice(null, deviceIds));
+    }
+
+    @Test
+    void shouldThrowNullPointerExceptionGivenNullDeviceIds() {
+        final var policyRuleConditions =
+                createPolicyRuleConditions(
+                        UUID.randomUUID().toString(),
+                        NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN,
+                        new IntegerKpiValue(3));
+        final var policyRuleActions =
+                createPolicyRuleActions(
+                        PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT,
+                        List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString()));
+
+        final var policyRuleState = new PolicyRuleState(RuleState.POLICY_EFFECTIVE);
+
+        final var policyRuleBasic =
+                createPolicyRuleBasic(
+                        "policyRuleId",
+                        3,
+                        policyRuleState,
+                        BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR,
+                        policyRuleConditions,
+                        policyRuleActions);
+
+        assertThatExceptionOfType(NullPointerException.class)
+                .isThrownBy(() -> createPolicyRuleDevice(policyRuleBasic, null));
+    }
+
+    @Test
+    void shouldThrowIllegalArgumentExceptionGivenEmptyDeviceIds() {
+        final var policyRuleConditions =
+                createPolicyRuleConditions(
+                        UUID.randomUUID().toString(),
+                        NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL,
+                        new IntegerKpiValue(3));
+        final var policyRuleActions =
+                createPolicyRuleActions(
+                        PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE,
+                        List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString()));
+
+        final var policyRuleState = new PolicyRuleState(RuleState.POLICY_EFFECTIVE);
+
+        final var policyRuleBasic =
+                createPolicyRuleBasic(
+                        "policyRuleId1",
+                        213,
+                        policyRuleState,
+                        BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND,
+                        policyRuleConditions,
+                        policyRuleActions);
+
+        final var deviceIds = Collections.<String>emptyList();
+
+        assertThatExceptionOfType(IllegalArgumentException.class)
+                .isThrownBy(() -> createPolicyRuleDevice(policyRuleBasic, deviceIds));
+    }
+
+    @Test
+    void shouldCreatePolicyRuleDeviceObject() {
+        final var policyRuleConditions =
+                createPolicyRuleConditions(
+                        UUID.randomUUID().toString(),
+                        NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_NOT_EQUAL,
+                        new IntegerKpiValue(3));
+        final var policyRuleActions =
+                createPolicyRuleActions(
+                        PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS,
+                        List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString()));
+
+        final var policyRuleState = new PolicyRuleState(RuleState.POLICY_EFFECTIVE);
+
+        final var policyRuleBasic =
+                createPolicyRuleBasic(
+                        "policyRuleId",
+                        3,
+                        policyRuleState,
+                        BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR,
+                        policyRuleConditions,
+                        policyRuleActions);
+
+        final var deviceIds = createDeviceIds();
+
+        final var expectedPolicyRuleDevice = new PolicyRuleDevice(policyRuleBasic, deviceIds);
+
+        final var policyRuleDevice = createPolicyRuleDevice(policyRuleBasic, deviceIds);
+
+        assertThat(policyRuleDevice).usingRecursiveComparison().isEqualTo(expectedPolicyRuleDevice);
+    }
+}
diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..b565b7e75b5cf9eb7748d0ba92e4fa3416b3b52e
--- /dev/null
+++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java
@@ -0,0 +1,222 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
+
+import eu.teraflow.policy.context.model.ServiceId;
+import eu.teraflow.policy.model.BooleanOperator;
+import eu.teraflow.policy.model.NumericalOperator;
+import eu.teraflow.policy.model.PolicyRuleAction;
+import eu.teraflow.policy.model.PolicyRuleActionEnum;
+import eu.teraflow.policy.model.PolicyRuleBasic;
+import eu.teraflow.policy.model.PolicyRuleCondition;
+import eu.teraflow.policy.model.PolicyRuleService;
+import eu.teraflow.policy.model.PolicyRuleState;
+import eu.teraflow.policy.model.RuleState;
+import eu.teraflow.policy.monitoring.model.IntegerKpiValue;
+import eu.teraflow.policy.monitoring.model.KpiValue;
+import io.quarkus.test.junit.QuarkusTest;
+import java.util.Collections;
+import java.util.List;
+import java.util.UUID;
+import org.junit.jupiter.api.Test;
+
+@QuarkusTest
+class PolicyRuleServiceValidationTest {
+
+    private List<PolicyRuleCondition> createPolicyRuleConditions(
+            String kpiId, NumericalOperator numericalOperator, KpiValue<?> kpiValue) {
+        final var policyRuleCondition = new PolicyRuleCondition(kpiId, numericalOperator, kpiValue);
+
+        return List.of(policyRuleCondition);
+    }
+
+    private List<PolicyRuleAction> createPolicyRuleActions(
+            PolicyRuleActionEnum policyRuleActionEnum, List<String> parameters) {
+        final var policyRuleAction = new PolicyRuleAction(policyRuleActionEnum, parameters);
+
+        return List.of(policyRuleAction);
+    }
+
+    private PolicyRuleBasic createPolicyRuleBasic(
+            String policyRuleId,
+            int priority,
+            PolicyRuleState policyRuleState,
+            BooleanOperator booleanOperator,
+            List<PolicyRuleCondition> policyRuleConditions,
+            List<PolicyRuleAction> policyRuleActions) {
+
+        return new PolicyRuleBasic(
+                policyRuleId,
+                policyRuleState,
+                priority,
+                policyRuleConditions,
+                booleanOperator,
+                policyRuleActions);
+    }
+
+    private ServiceId createServiceId(String contextId, String id) {
+        return new ServiceId(contextId, id);
+    }
+
+    private List<String> createDeviceIds() {
+        return List.of("deviceIdA", "deviceIdB");
+    }
+
+    private PolicyRuleService createPolicyRuleService(
+            PolicyRuleBasic policyRuleBasic, ServiceId serviceId, List<String> deviceIds) {
+
+        return new PolicyRuleService(policyRuleBasic, serviceId, deviceIds);
+    }
+
+    @Test
+    void shouldThrowNullPointerExceptionGivenNullPolicyRuleBasic() {
+        final var serviceId = createServiceId("CONTEXT_ID", "id");
+        final var deviceIds = createDeviceIds();
+
+        assertThatExceptionOfType(NullPointerException.class)
+                .isThrownBy(() -> createPolicyRuleService(null, serviceId, deviceIds));
+    }
+
+    @Test
+    void shouldThrowNullPointerExceptionGivenNullServiceId() {
+        final var policyRuleConditions =
+                createPolicyRuleConditions(
+                        UUID.randomUUID().toString(),
+                        NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL,
+                        new IntegerKpiValue(3));
+        final var policyRuleActions =
+                createPolicyRuleActions(
+                        PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT,
+                        List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString()));
+
+        final var policyRuleState = new PolicyRuleState(RuleState.POLICY_EFFECTIVE);
+
+        final var deviceIds = createDeviceIds();
+
+        final var policyRuleBasic =
+                createPolicyRuleBasic(
+                        "policyRuleId1",
+                        3,
+                        policyRuleState,
+                        BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR,
+                        policyRuleConditions,
+                        policyRuleActions);
+
+        assertThatExceptionOfType(NullPointerException.class)
+                .isThrownBy(() -> createPolicyRuleService(policyRuleBasic, null, deviceIds));
+    }
+
+    @Test
+    void shouldThrowNullPointerExceptionGivenNullDeviceIds() {
+        final var serviceId = createServiceId("contextId", "ID");
+
+        final var policyRuleConditions =
+                createPolicyRuleConditions(
+                        UUID.randomUUID().toString(),
+                        NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN,
+                        new IntegerKpiValue(3));
+        final var policyRuleActions =
+                createPolicyRuleActions(
+                        PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE,
+                        List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString()));
+
+        final var policyRuleState = new PolicyRuleState(RuleState.POLICY_EFFECTIVE);
+
+        final var policyRuleBasic =
+                createPolicyRuleBasic(
+                        "policyRuleId2",
+                        2,
+                        policyRuleState,
+                        BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND,
+                        policyRuleConditions,
+                        policyRuleActions);
+
+        assertThatExceptionOfType(NullPointerException.class)
+                .isThrownBy(() -> createPolicyRuleService(policyRuleBasic, serviceId, null));
+    }
+
+    @Test
+    void shouldCreatePolicyRuleServiceObjectGivenEmptyDeviceIds() {
+        final var serviceId = createServiceId("contextId", "id");
+        final var deviceIds = Collections.<String>emptyList();
+
+        final var policyRuleConditions =
+                createPolicyRuleConditions(
+                        UUID.randomUUID().toString(),
+                        NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN,
+                        new IntegerKpiValue(3));
+        final var policyRuleActions =
+                createPolicyRuleActions(
+                        PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS,
+                        List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString()));
+
+        final var policyRuleState = new PolicyRuleState(RuleState.POLICY_EFFECTIVE);
+
+        final var policyRuleBasic =
+                createPolicyRuleBasic(
+                        "policyRuleId",
+                        777,
+                        policyRuleState,
+                        BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND,
+                        policyRuleConditions,
+                        policyRuleActions);
+
+        final var expectedPolicyRuleService =
+                new PolicyRuleService(policyRuleBasic, serviceId, deviceIds);
+
+        final var policyRuleService = createPolicyRuleService(policyRuleBasic, serviceId, deviceIds);
+
+        assertThat(policyRuleService).usingRecursiveComparison().isEqualTo(expectedPolicyRuleService);
+    }
+
+    @Test
+    void shouldCreatePolicyRuleServiceObject() {
+        final var serviceId = createServiceId("contextId", "id");
+        final var deviceIds = List.of("deviceIdA", "deviceIdB");
+
+        final var policyRuleConditions =
+                createPolicyRuleConditions(
+                        UUID.randomUUID().toString(),
+                        NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN,
+                        new IntegerKpiValue(3));
+        final var policyRuleActions =
+                createPolicyRuleActions(
+                        PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT,
+                        List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString()));
+
+        final var policyRuleState = new PolicyRuleState(RuleState.POLICY_EFFECTIVE);
+
+        final var policyRuleBasic =
+                createPolicyRuleBasic(
+                        "policyRuleId",
+                        3,
+                        policyRuleState,
+                        BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR,
+                        policyRuleConditions,
+                        policyRuleActions);
+
+        final var expectedPolicyRuleService =
+                new PolicyRuleService(policyRuleBasic, serviceId, deviceIds);
+
+        final var policyRuleService = createPolicyRuleService(policyRuleBasic, serviceId, deviceIds);
+
+        assertThat(policyRuleService).usingRecursiveComparison().isEqualTo(expectedPolicyRuleService);
+    }
+}
diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java
index 7e3044c1d2212d6bf8726c55673ff84e5d174f4f..3f123243204d46db6794a5ca067276d4cbfb7e14 100644
--- a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java
+++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java
@@ -144,11 +144,26 @@ class PolicyServiceTest {
     void shouldAddPolicyDevice() throws ExecutionException, InterruptedException, TimeoutException {
         CompletableFuture<String> message = new CompletableFuture<>();
 
+        final var expectedDeviceIdUuid1 =
+                serializer.serializeUuid("20db867c-772d-4872-9179-244ecafb3257");
+        final var expectedDeviceIdUuid2 =
+                serializer.serializeUuid("095974ac-d757-412d-b317-bcf355220aa9");
+
+        final var expectedDeviceId1 =
+                ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(expectedDeviceIdUuid1).build();
+        final var expectedDeviceId2 =
+                ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(expectedDeviceIdUuid2).build();
+
         final var policyRuleBasic = createPolicyRuleBasic();
+        final var deviceIds = List.of(expectedDeviceId1, expectedDeviceId2);
+
         final var expectedPolicyRuleState = policyRuleBasic.getPolicyRuleState();
 
         final var policyRuleDevice =
-                Policy.PolicyRuleDevice.newBuilder().setPolicyRuleBasic(policyRuleBasic).build();
+                Policy.PolicyRuleDevice.newBuilder()
+                        .setPolicyRuleBasic(policyRuleBasic)
+                        .addAllDeviceList(deviceIds)
+                        .build();
 
         client
                 .policyAddDevice(policyRuleDevice)
diff --git a/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java b/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java
index 40e8ce80bacc02cca70a730f0f5a618e761d597d..05f835d58f6552f3bd21f467b02026c9c509a67c 100644
--- a/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java
+++ b/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java
@@ -58,7 +58,7 @@ import eu.teraflow.policy.context.model.DeviceConfig;
 import eu.teraflow.policy.context.model.DeviceDriverEnum;
 import eu.teraflow.policy.context.model.DeviceOperationalStatus;
 import eu.teraflow.policy.context.model.Empty;
-import eu.teraflow.policy.context.model.EndPoint;
+import eu.teraflow.policy.context.model.EndPoint.EndPointBuilder;
 import eu.teraflow.policy.context.model.EndPointId;
 import eu.teraflow.policy.context.model.Event;
 import eu.teraflow.policy.context.model.EventTypeEnum;
@@ -1310,14 +1310,20 @@ class SerializerTest {
 
     @Test
     void shouldSerializeConstraintSlaIsolationLevel() {
-        final var isolationLevelEnum = IsolationLevelEnum.NETWORK_FUNCTIONS_ISOLATION;
+        final var isolationLevelEnums =
+                List.of(
+                        IsolationLevelEnum.PHYSICAL_MEMORY_ISOLATION,
+                        IsolationLevelEnum.NETWORK_FUNCTIONS_ISOLATION);
 
-        final var constraintSlaIsolationLevel = new ConstraintSlaIsolationLevel(isolationLevelEnum);
+        final var constraintSlaIsolationLevel = new ConstraintSlaIsolationLevel(isolationLevelEnums);
 
-        final var serializedIsolationLevelEnum = serializer.serialize(isolationLevelEnum);
+        final var serializedIsolationLevelEnums =
+                isolationLevelEnums.stream()
+                        .map(isolationLevelEnum -> serializer.serialize(isolationLevelEnum))
+                        .collect(Collectors.toList());
         final var expectedConstraintSlaIsolationLevel =
                 ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder()
-                        .setIsolationLevel(serializedIsolationLevelEnum)
+                        .addAllIsolationLevel(serializedIsolationLevelEnums)
                         .build();
 
         final var serializedConstraintSlaIsolationLevel =
@@ -1330,15 +1336,19 @@ class SerializerTest {
 
     @Test
     void shouldDeserializeConstraintSlaIsolationLevel() {
-        final var isolationLevelEnum = IsolationLevelEnum.NETWORK_FUNCTIONS_ISOLATION;
+        final var isolationLevelEnums =
+                List.of(IsolationLevelEnum.PROCESS_ISOLATION, IsolationLevelEnum.SERVICE_ISOLATION);
 
         final var expectedConstraintSlaIsolationLevel =
-                new ConstraintSlaIsolationLevel(isolationLevelEnum);
+                new ConstraintSlaIsolationLevel(isolationLevelEnums);
 
-        final var serializedIsolationLevelEnum = serializer.serialize(isolationLevelEnum);
+        final var serializedIsolationLevelEnums =
+                isolationLevelEnums.stream()
+                        .map(isolationLevelEnum -> serializer.serialize(isolationLevelEnum))
+                        .collect(Collectors.toList());
         final var serializedConstraintSlaIsolationLevel =
                 ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder()
-                        .setIsolationLevel(serializedIsolationLevelEnum)
+                        .addAllIsolationLevel(serializedIsolationLevelEnums)
                         .build();
 
         final var constraintSlaIsolationLevel =
@@ -1648,19 +1658,23 @@ class SerializerTest {
 
     @Test
     void shouldDeserializeConstraintOfTypeConstraintSlaIsolationLevel() {
-        final var isolationLevelEnum = IsolationLevelEnum.PHYSICAL_ISOLATION;
+        final var isolationLevelEnums =
+                List.of(IsolationLevelEnum.PHYSICAL_ISOLATION, IsolationLevelEnum.NO_ISOLATION);
 
         final var expectedConstraintSlaIsolationLevel =
-                new ConstraintSlaIsolationLevel(isolationLevelEnum);
+                new ConstraintSlaIsolationLevel(isolationLevelEnums);
         final var expectedConstraintTypeSlaIsolationLevel =
                 new ConstraintTypeSlaIsolationLevel(expectedConstraintSlaIsolationLevel);
         final var expectedConstraint = new Constraint(expectedConstraintTypeSlaIsolationLevel);
 
-        final var serializedIsolationLevelEnum = serializer.serialize(isolationLevelEnum);
+        final var serializedIsolationLevelEnums =
+                isolationLevelEnums.stream()
+                        .map(isolationLevelEnum -> serializer.serialize(isolationLevelEnum))
+                        .collect(Collectors.toList());
 
         final var serializedConstraintSlaIsolationLevel =
                 ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder()
-                        .setIsolationLevel(serializedIsolationLevelEnum)
+                        .addAllIsolationLevel(serializedIsolationLevelEnums)
                         .build();
 
         final var serializedConstraint =
@@ -1675,18 +1689,24 @@ class SerializerTest {
 
     @Test
     void shouldSerializeConstraintOfTypeConstraintSlaIsolationLevel() {
-        final var isolationLevelEnum = IsolationLevelEnum.PHYSICAL_ISOLATION;
+        final var isolationLevelEnums =
+                List.of(
+                        IsolationLevelEnum.VIRTUAL_RESOURCE_ISOLATION,
+                        IsolationLevelEnum.PHYSICAL_MEMORY_ISOLATION);
 
-        final var constraintSlaIsolationLevel = new ConstraintSlaIsolationLevel(isolationLevelEnum);
+        final var constraintSlaIsolationLevel = new ConstraintSlaIsolationLevel(isolationLevelEnums);
         final var constraintTypeSlaIsolationLevel =
                 new ConstraintTypeSlaIsolationLevel(constraintSlaIsolationLevel);
         final var constraint = new Constraint(constraintTypeSlaIsolationLevel);
 
-        final var serializedIsolationLevelEnum = serializer.serialize(isolationLevelEnum);
+        final var serializedIsolationLevelEnums =
+                isolationLevelEnums.stream()
+                        .map(isolationLevelEnum -> serializer.serialize(isolationLevelEnum))
+                        .collect(Collectors.toList());
 
         final var expectedConstraintSlaIsolationLevel =
                 ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder()
-                        .setIsolationLevel(serializedIsolationLevelEnum)
+                        .addAllIsolationLevel(serializedIsolationLevelEnums)
                         .build();
 
         final var expectedConstraint =
@@ -2347,8 +2367,30 @@ class SerializerTest {
         assertThat(subscriptionId).isEqualTo(expectedSubscriptionId);
     }
 
+    private static Stream<Arguments> provideNumericalOperators() {
+        return Stream.of(
+                Arguments.of(
+                        NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_EQUAL,
+                        PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_EQUAL),
+                Arguments.of(
+                        NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_NOT_EQUAL,
+                        PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_NOT_EQUAL),
+                Arguments.of(
+                        NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN,
+                        PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_LESS_THAN),
+                Arguments.of(
+                        NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL,
+                        PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL),
+                Arguments.of(
+                        NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN,
+                        PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN),
+                Arguments.of(
+                        NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL,
+                        PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL));
+    }
+
     @ParameterizedTest
-    @MethodSource("provideNumericalOperator")
+    @MethodSource("provideNumericalOperators")
     void shouldSerializePolicyRuleConditionGivenMultipleNumericalOperators(
             NumericalOperator expectedNumericalOperator) {
         final var expectedPolicyRuleConditionKpiId = "expectedPolicyRuleConditionKpiId";
@@ -3484,8 +3526,8 @@ class SerializerTest {
 
         final var locationTypeRegion = new LocationTypeRegion("ATH");
         final var location = new Location(locationTypeRegion);
-
-        final var endPoint = new EndPoint(endPointId, endPointType, kpiSampleTypes, location);
+        final var endPoint =
+                new EndPointBuilder(endPointId, endPointType, kpiSampleTypes).location(location).build();
 
         final var serializedEndPointId = serializer.serialize(endPointId);
         final var serializedKpiSampleTypes =
@@ -3521,8 +3563,9 @@ class SerializerTest {
         final var expectedLocation = new Location(expectedLocationTypeRegion);
 
         final var expectedEndPoint =
-                new EndPoint(
-                        expectedEndPointId, expectedEndPointType, expectedKpiSampleTypes, expectedLocation);
+                new EndPointBuilder(expectedEndPointId, expectedEndPointType, expectedKpiSampleTypes)
+                        .location(expectedLocation)
+                        .build();
 
         final var serializedEndPointId = serializer.serialize(expectedEndPointId);
         final var serializedKpiSampleTypes =
@@ -3575,7 +3618,10 @@ class SerializerTest {
                 List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
         final var locationTypeRegionA = new LocationTypeRegion("ATH");
         final var locationA = new Location(locationTypeRegionA);
-        final var endPointA = new EndPoint(endPointIdA, endPointTypeA, kpiSampleTypesA, locationA);
+        final var endPointA =
+                new EndPointBuilder(endPointIdA, endPointTypeA, kpiSampleTypesA)
+                        .location(locationA)
+                        .build();
 
         final var expectedTopologyIdB = new TopologyId("contextIdB", "idB");
         final var expectedDeviceIdB = "expectedDeviceIdB";
@@ -3587,7 +3633,10 @@ class SerializerTest {
                 List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
         final var locationTypeRegionB = new LocationTypeRegion("ATH");
         final var locationB = new Location(locationTypeRegionB);
-        final var endPointB = new EndPoint(endPointIdB, endPointTypeB, kpiSampleTypesB, locationB);
+        final var endPointB =
+                new EndPointBuilder(endPointIdB, endPointTypeB, kpiSampleTypesB)
+                        .location(locationB)
+                        .build();
 
         final var endPoints = List.of(endPointA, endPointB);
 
@@ -3654,7 +3703,10 @@ class SerializerTest {
                 List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
         final var locationTypeRegionA = new LocationTypeRegion("ATH");
         final var locationA = new Location(locationTypeRegionA);
-        final var endPointA = new EndPoint(endPointIdA, endPointTypeA, kpiSampleTypesA, locationA);
+        final var endPointA =
+                new EndPointBuilder(endPointIdA, endPointTypeA, kpiSampleTypesA)
+                        .location(locationA)
+                        .build();
 
         final var expectedTopologyIdB = new TopologyId("contextIdB", "idB");
         final var expectedDeviceIdB = "expectedDeviceIdB";
@@ -3666,7 +3718,10 @@ class SerializerTest {
                 List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
         final var locationTypeRegionB = new LocationTypeRegion("ATH");
         final var locationB = new Location(locationTypeRegionB);
-        final var endPointB = new EndPoint(endPointIdB, endPointTypeB, kpiSampleTypesB, locationB);
+        final var endPointB =
+                new EndPointBuilder(endPointIdB, endPointTypeB, kpiSampleTypesB)
+                        .location(locationB)
+                        .build();
 
         final var endPoints = List.of(endPointA, endPointB);
 
diff --git a/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java b/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java
index 09db33413e7785bb484fdd992f81894ac2dcafbf..45a64fabb43bab645e97e9d80bc1825242006dce 100644
--- a/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java
+++ b/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java
@@ -29764,32 +29764,47 @@ public final class ContextOuterClass {
     context.ContextOuterClass.SliceStatusOrBuilder getSliceStatusOrBuilder();
 
     /**
-     * <code>.context.SliceOwner slice_owner = 7;</code>
+     * <code>.context.SliceConfig slice_config = 7;</code>
+     * @return Whether the sliceConfig field is set.
+     */
+    boolean hasSliceConfig();
+    /**
+     * <code>.context.SliceConfig slice_config = 7;</code>
+     * @return The sliceConfig.
+     */
+    context.ContextOuterClass.SliceConfig getSliceConfig();
+    /**
+     * <code>.context.SliceConfig slice_config = 7;</code>
+     */
+    context.ContextOuterClass.SliceConfigOrBuilder getSliceConfigOrBuilder();
+
+    /**
+     * <code>.context.SliceOwner slice_owner = 8;</code>
      * @return Whether the sliceOwner field is set.
      */
     boolean hasSliceOwner();
     /**
-     * <code>.context.SliceOwner slice_owner = 7;</code>
+     * <code>.context.SliceOwner slice_owner = 8;</code>
      * @return The sliceOwner.
      */
     context.ContextOuterClass.SliceOwner getSliceOwner();
     /**
-     * <code>.context.SliceOwner slice_owner = 7;</code>
+     * <code>.context.SliceOwner slice_owner = 8;</code>
      */
     context.ContextOuterClass.SliceOwnerOrBuilder getSliceOwnerOrBuilder();
 
     /**
-     * <code>.context.Timestamp timestamp = 8;</code>
+     * <code>.context.Timestamp timestamp = 9;</code>
      * @return Whether the timestamp field is set.
      */
     boolean hasTimestamp();
     /**
-     * <code>.context.Timestamp timestamp = 8;</code>
+     * <code>.context.Timestamp timestamp = 9;</code>
      * @return The timestamp.
      */
     context.ContextOuterClass.Timestamp getTimestamp();
     /**
-     * <code>.context.Timestamp timestamp = 8;</code>
+     * <code>.context.Timestamp timestamp = 9;</code>
      */
     context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder();
   }
@@ -29906,6 +29921,19 @@ public final class ContextOuterClass {
               break;
             }
             case 58: {
+              context.ContextOuterClass.SliceConfig.Builder subBuilder = null;
+              if (sliceConfig_ != null) {
+                subBuilder = sliceConfig_.toBuilder();
+              }
+              sliceConfig_ = input.readMessage(context.ContextOuterClass.SliceConfig.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(sliceConfig_);
+                sliceConfig_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 66: {
               context.ContextOuterClass.SliceOwner.Builder subBuilder = null;
               if (sliceOwner_ != null) {
                 subBuilder = sliceOwner_.toBuilder();
@@ -29918,7 +29946,7 @@ public final class ContextOuterClass {
 
               break;
             }
-            case 66: {
+            case 74: {
               context.ContextOuterClass.Timestamp.Builder subBuilder = null;
               if (timestamp_ != null) {
                 subBuilder = timestamp_.toBuilder();
@@ -30187,10 +30215,36 @@ public final class ContextOuterClass {
       return getSliceStatus();
     }
 
-    public static final int SLICE_OWNER_FIELD_NUMBER = 7;
+    public static final int SLICE_CONFIG_FIELD_NUMBER = 7;
+    private context.ContextOuterClass.SliceConfig sliceConfig_;
+    /**
+     * <code>.context.SliceConfig slice_config = 7;</code>
+     * @return Whether the sliceConfig field is set.
+     */
+    @java.lang.Override
+    public boolean hasSliceConfig() {
+      return sliceConfig_ != null;
+    }
+    /**
+     * <code>.context.SliceConfig slice_config = 7;</code>
+     * @return The sliceConfig.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceConfig getSliceConfig() {
+      return sliceConfig_ == null ? context.ContextOuterClass.SliceConfig.getDefaultInstance() : sliceConfig_;
+    }
+    /**
+     * <code>.context.SliceConfig slice_config = 7;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceConfigOrBuilder getSliceConfigOrBuilder() {
+      return getSliceConfig();
+    }
+
+    public static final int SLICE_OWNER_FIELD_NUMBER = 8;
     private context.ContextOuterClass.SliceOwner sliceOwner_;
     /**
-     * <code>.context.SliceOwner slice_owner = 7;</code>
+     * <code>.context.SliceOwner slice_owner = 8;</code>
      * @return Whether the sliceOwner field is set.
      */
     @java.lang.Override
@@ -30198,7 +30252,7 @@ public final class ContextOuterClass {
       return sliceOwner_ != null;
     }
     /**
-     * <code>.context.SliceOwner slice_owner = 7;</code>
+     * <code>.context.SliceOwner slice_owner = 8;</code>
      * @return The sliceOwner.
      */
     @java.lang.Override
@@ -30206,17 +30260,17 @@ public final class ContextOuterClass {
       return sliceOwner_ == null ? context.ContextOuterClass.SliceOwner.getDefaultInstance() : sliceOwner_;
     }
     /**
-     * <code>.context.SliceOwner slice_owner = 7;</code>
+     * <code>.context.SliceOwner slice_owner = 8;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.SliceOwnerOrBuilder getSliceOwnerOrBuilder() {
       return getSliceOwner();
     }
 
-    public static final int TIMESTAMP_FIELD_NUMBER = 8;
+    public static final int TIMESTAMP_FIELD_NUMBER = 9;
     private context.ContextOuterClass.Timestamp timestamp_;
     /**
-     * <code>.context.Timestamp timestamp = 8;</code>
+     * <code>.context.Timestamp timestamp = 9;</code>
      * @return Whether the timestamp field is set.
      */
     @java.lang.Override
@@ -30224,7 +30278,7 @@ public final class ContextOuterClass {
       return timestamp_ != null;
     }
     /**
-     * <code>.context.Timestamp timestamp = 8;</code>
+     * <code>.context.Timestamp timestamp = 9;</code>
      * @return The timestamp.
      */
     @java.lang.Override
@@ -30232,7 +30286,7 @@ public final class ContextOuterClass {
       return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
     }
     /**
-     * <code>.context.Timestamp timestamp = 8;</code>
+     * <code>.context.Timestamp timestamp = 9;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
@@ -30271,11 +30325,14 @@ public final class ContextOuterClass {
       if (sliceStatus_ != null) {
         output.writeMessage(6, getSliceStatus());
       }
+      if (sliceConfig_ != null) {
+        output.writeMessage(7, getSliceConfig());
+      }
       if (sliceOwner_ != null) {
-        output.writeMessage(7, getSliceOwner());
+        output.writeMessage(8, getSliceOwner());
       }
       if (timestamp_ != null) {
-        output.writeMessage(8, getTimestamp());
+        output.writeMessage(9, getTimestamp());
       }
       unknownFields.writeTo(output);
     }
@@ -30310,13 +30367,17 @@ public final class ContextOuterClass {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(6, getSliceStatus());
       }
+      if (sliceConfig_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(7, getSliceConfig());
+      }
       if (sliceOwner_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(7, getSliceOwner());
+          .computeMessageSize(8, getSliceOwner());
       }
       if (timestamp_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(8, getTimestamp());
+          .computeMessageSize(9, getTimestamp());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -30351,6 +30412,11 @@ public final class ContextOuterClass {
         if (!getSliceStatus()
             .equals(other.getSliceStatus())) return false;
       }
+      if (hasSliceConfig() != other.hasSliceConfig()) return false;
+      if (hasSliceConfig()) {
+        if (!getSliceConfig()
+            .equals(other.getSliceConfig())) return false;
+      }
       if (hasSliceOwner() != other.hasSliceOwner()) return false;
       if (hasSliceOwner()) {
         if (!getSliceOwner()
@@ -30396,6 +30462,10 @@ public final class ContextOuterClass {
         hash = (37 * hash) + SLICE_STATUS_FIELD_NUMBER;
         hash = (53 * hash) + getSliceStatus().hashCode();
       }
+      if (hasSliceConfig()) {
+        hash = (37 * hash) + SLICE_CONFIG_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceConfig().hashCode();
+      }
       if (hasSliceOwner()) {
         hash = (37 * hash) + SLICE_OWNER_FIELD_NUMBER;
         hash = (53 * hash) + getSliceOwner().hashCode();
@@ -30577,6 +30647,12 @@ public final class ContextOuterClass {
           sliceStatus_ = null;
           sliceStatusBuilder_ = null;
         }
+        if (sliceConfigBuilder_ == null) {
+          sliceConfig_ = null;
+        } else {
+          sliceConfig_ = null;
+          sliceConfigBuilder_ = null;
+        }
         if (sliceOwnerBuilder_ == null) {
           sliceOwner_ = null;
         } else {
@@ -30662,6 +30738,11 @@ public final class ContextOuterClass {
         } else {
           result.sliceStatus_ = sliceStatusBuilder_.build();
         }
+        if (sliceConfigBuilder_ == null) {
+          result.sliceConfig_ = sliceConfig_;
+        } else {
+          result.sliceConfig_ = sliceConfigBuilder_.build();
+        }
         if (sliceOwnerBuilder_ == null) {
           result.sliceOwner_ = sliceOwner_;
         } else {
@@ -30830,6 +30911,9 @@ public final class ContextOuterClass {
         if (other.hasSliceStatus()) {
           mergeSliceStatus(other.getSliceStatus());
         }
+        if (other.hasSliceConfig()) {
+          mergeSliceConfig(other.getSliceConfig());
+        }
         if (other.hasSliceOwner()) {
           mergeSliceOwner(other.getSliceOwner());
         }
@@ -32064,18 +32148,137 @@ public final class ContextOuterClass {
         return sliceStatusBuilder_;
       }
 
+      private context.ContextOuterClass.SliceConfig sliceConfig_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceConfig, context.ContextOuterClass.SliceConfig.Builder, context.ContextOuterClass.SliceConfigOrBuilder> sliceConfigBuilder_;
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       * @return Whether the sliceConfig field is set.
+       */
+      public boolean hasSliceConfig() {
+        return sliceConfigBuilder_ != null || sliceConfig_ != null;
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       * @return The sliceConfig.
+       */
+      public context.ContextOuterClass.SliceConfig getSliceConfig() {
+        if (sliceConfigBuilder_ == null) {
+          return sliceConfig_ == null ? context.ContextOuterClass.SliceConfig.getDefaultInstance() : sliceConfig_;
+        } else {
+          return sliceConfigBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       */
+      public Builder setSliceConfig(context.ContextOuterClass.SliceConfig value) {
+        if (sliceConfigBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          sliceConfig_ = value;
+          onChanged();
+        } else {
+          sliceConfigBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       */
+      public Builder setSliceConfig(
+          context.ContextOuterClass.SliceConfig.Builder builderForValue) {
+        if (sliceConfigBuilder_ == null) {
+          sliceConfig_ = builderForValue.build();
+          onChanged();
+        } else {
+          sliceConfigBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       */
+      public Builder mergeSliceConfig(context.ContextOuterClass.SliceConfig value) {
+        if (sliceConfigBuilder_ == null) {
+          if (sliceConfig_ != null) {
+            sliceConfig_ =
+              context.ContextOuterClass.SliceConfig.newBuilder(sliceConfig_).mergeFrom(value).buildPartial();
+          } else {
+            sliceConfig_ = value;
+          }
+          onChanged();
+        } else {
+          sliceConfigBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       */
+      public Builder clearSliceConfig() {
+        if (sliceConfigBuilder_ == null) {
+          sliceConfig_ = null;
+          onChanged();
+        } else {
+          sliceConfig_ = null;
+          sliceConfigBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       */
+      public context.ContextOuterClass.SliceConfig.Builder getSliceConfigBuilder() {
+        
+        onChanged();
+        return getSliceConfigFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       */
+      public context.ContextOuterClass.SliceConfigOrBuilder getSliceConfigOrBuilder() {
+        if (sliceConfigBuilder_ != null) {
+          return sliceConfigBuilder_.getMessageOrBuilder();
+        } else {
+          return sliceConfig_ == null ?
+              context.ContextOuterClass.SliceConfig.getDefaultInstance() : sliceConfig_;
+        }
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceConfig, context.ContextOuterClass.SliceConfig.Builder, context.ContextOuterClass.SliceConfigOrBuilder> 
+          getSliceConfigFieldBuilder() {
+        if (sliceConfigBuilder_ == null) {
+          sliceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceConfig, context.ContextOuterClass.SliceConfig.Builder, context.ContextOuterClass.SliceConfigOrBuilder>(
+                  getSliceConfig(),
+                  getParentForChildren(),
+                  isClean());
+          sliceConfig_ = null;
+        }
+        return sliceConfigBuilder_;
+      }
+
       private context.ContextOuterClass.SliceOwner sliceOwner_;
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.SliceOwner, context.ContextOuterClass.SliceOwner.Builder, context.ContextOuterClass.SliceOwnerOrBuilder> sliceOwnerBuilder_;
       /**
-       * <code>.context.SliceOwner slice_owner = 7;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        * @return Whether the sliceOwner field is set.
        */
       public boolean hasSliceOwner() {
         return sliceOwnerBuilder_ != null || sliceOwner_ != null;
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 7;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        * @return The sliceOwner.
        */
       public context.ContextOuterClass.SliceOwner getSliceOwner() {
@@ -32086,7 +32289,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 7;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        */
       public Builder setSliceOwner(context.ContextOuterClass.SliceOwner value) {
         if (sliceOwnerBuilder_ == null) {
@@ -32102,7 +32305,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 7;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        */
       public Builder setSliceOwner(
           context.ContextOuterClass.SliceOwner.Builder builderForValue) {
@@ -32116,7 +32319,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 7;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        */
       public Builder mergeSliceOwner(context.ContextOuterClass.SliceOwner value) {
         if (sliceOwnerBuilder_ == null) {
@@ -32134,7 +32337,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 7;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        */
       public Builder clearSliceOwner() {
         if (sliceOwnerBuilder_ == null) {
@@ -32148,7 +32351,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 7;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        */
       public context.ContextOuterClass.SliceOwner.Builder getSliceOwnerBuilder() {
         
@@ -32156,7 +32359,7 @@ public final class ContextOuterClass {
         return getSliceOwnerFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 7;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        */
       public context.ContextOuterClass.SliceOwnerOrBuilder getSliceOwnerOrBuilder() {
         if (sliceOwnerBuilder_ != null) {
@@ -32167,7 +32370,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 7;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.SliceOwner, context.ContextOuterClass.SliceOwner.Builder, context.ContextOuterClass.SliceOwnerOrBuilder> 
@@ -32187,14 +32390,14 @@ public final class ContextOuterClass {
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> timestampBuilder_;
       /**
-       * <code>.context.Timestamp timestamp = 8;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        * @return Whether the timestamp field is set.
        */
       public boolean hasTimestamp() {
         return timestampBuilder_ != null || timestamp_ != null;
       }
       /**
-       * <code>.context.Timestamp timestamp = 8;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        * @return The timestamp.
        */
       public context.ContextOuterClass.Timestamp getTimestamp() {
@@ -32205,7 +32408,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>.context.Timestamp timestamp = 8;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        */
       public Builder setTimestamp(context.ContextOuterClass.Timestamp value) {
         if (timestampBuilder_ == null) {
@@ -32221,7 +32424,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 8;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        */
       public Builder setTimestamp(
           context.ContextOuterClass.Timestamp.Builder builderForValue) {
@@ -32235,7 +32438,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 8;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        */
       public Builder mergeTimestamp(context.ContextOuterClass.Timestamp value) {
         if (timestampBuilder_ == null) {
@@ -32253,7 +32456,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 8;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        */
       public Builder clearTimestamp() {
         if (timestampBuilder_ == null) {
@@ -32267,7 +32470,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 8;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        */
       public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
         
@@ -32275,7 +32478,7 @@ public final class ContextOuterClass {
         return getTimestampFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Timestamp timestamp = 8;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        */
       public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
         if (timestampBuilder_ != null) {
@@ -32286,7 +32489,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>.context.Timestamp timestamp = 8;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
@@ -33650,55 +33853,55 @@ public final class ContextOuterClass {
 
   }
 
-  public interface SliceIdListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.SliceIdList)
+  public interface SliceConfigOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceConfig)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    java.util.List<context.ContextOuterClass.SliceId> 
-        getSliceIdsList();
+    java.util.List<context.ContextOuterClass.ConfigRule> 
+        getConfigRulesList();
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    context.ContextOuterClass.SliceId getSliceIds(int index);
+    context.ContextOuterClass.ConfigRule getConfigRules(int index);
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    int getSliceIdsCount();
+    int getConfigRulesCount();
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
-        getSliceIdsOrBuilderList();
+    java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+        getConfigRulesOrBuilderList();
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
+    context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
         int index);
   }
   /**
-   * Protobuf type {@code context.SliceIdList}
+   * Protobuf type {@code context.SliceConfig}
    */
-  public static final class SliceIdList extends
+  public static final class SliceConfig extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.SliceIdList)
-      SliceIdListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceConfig)
+      SliceConfigOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SliceIdList.newBuilder() to construct.
-    private SliceIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceConfig.newBuilder() to construct.
+    private SliceConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SliceIdList() {
-      sliceIds_ = java.util.Collections.emptyList();
+    private SliceConfig() {
+      configRules_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SliceIdList();
+      return new SliceConfig();
     }
 
     @java.lang.Override
@@ -33706,7 +33909,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SliceIdList(
+    private SliceConfig(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -33727,11 +33930,11 @@ public final class ContextOuterClass {
               break;
             case 10: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>();
+                configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              sliceIds_.add(
-                  input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry));
+              configRules_.add(
+                  input.readMessage(context.ContextOuterClass.ConfigRule.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -33750,7 +33953,7 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
+          configRules_ = java.util.Collections.unmodifiableList(configRules_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -33758,55 +33961,55 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
+      return context.ContextOuterClass.internal_static_context_SliceConfig_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_SliceIdList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceConfig_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.SliceIdList.class, context.ContextOuterClass.SliceIdList.Builder.class);
+              context.ContextOuterClass.SliceConfig.class, context.ContextOuterClass.SliceConfig.Builder.class);
     }
 
-    public static final int SLICE_IDS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.SliceId> sliceIds_;
+    public static final int CONFIG_RULES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ConfigRule> configRules_;
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.SliceId> getSliceIdsList() {
-      return sliceIds_;
+    public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
+      return configRules_;
     }
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
-        getSliceIdsOrBuilderList() {
-      return sliceIds_;
+    public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+        getConfigRulesOrBuilderList() {
+      return configRules_;
     }
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public int getSliceIdsCount() {
-      return sliceIds_.size();
+    public int getConfigRulesCount() {
+      return configRules_.size();
     }
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceId getSliceIds(int index) {
-      return sliceIds_.get(index);
+    public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
+      return configRules_.get(index);
     }
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
+    public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
         int index) {
-      return sliceIds_.get(index);
+      return configRules_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -33823,8 +34026,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < sliceIds_.size(); i++) {
-        output.writeMessage(1, sliceIds_.get(i));
+      for (int i = 0; i < configRules_.size(); i++) {
+        output.writeMessage(1, configRules_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -33835,9 +34038,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < sliceIds_.size(); i++) {
+      for (int i = 0; i < configRules_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, sliceIds_.get(i));
+          .computeMessageSize(1, configRules_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -33849,13 +34052,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.SliceIdList)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceConfig)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.SliceIdList other = (context.ContextOuterClass.SliceIdList) obj;
+      context.ContextOuterClass.SliceConfig other = (context.ContextOuterClass.SliceConfig) obj;
 
-      if (!getSliceIdsList()
-          .equals(other.getSliceIdsList())) return false;
+      if (!getConfigRulesList()
+          .equals(other.getConfigRulesList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -33867,78 +34070,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getSliceIdsCount() > 0) {
-        hash = (37 * hash) + SLICE_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceIdsList().hashCode();
+      if (getConfigRulesCount() > 0) {
+        hash = (37 * hash) + CONFIG_RULES_FIELD_NUMBER;
+        hash = (53 * hash) + getConfigRulesList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceConfig parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceConfig parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceIdList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceConfig parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceIdList parseDelimitedFrom(
+    public static context.ContextOuterClass.SliceConfig parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -33951,7 +34154,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.SliceIdList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceConfig prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -33967,26 +34170,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.SliceIdList}
+     * Protobuf type {@code context.SliceConfig}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.SliceIdList)
-        context.ContextOuterClass.SliceIdListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.SliceConfig)
+        context.ContextOuterClass.SliceConfigOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceConfig_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_SliceIdList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceConfig_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.SliceIdList.class, context.ContextOuterClass.SliceIdList.Builder.class);
+                context.ContextOuterClass.SliceConfig.class, context.ContextOuterClass.SliceConfig.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.SliceIdList.newBuilder()
+      // Construct using context.ContextOuterClass.SliceConfig.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -33999,17 +34202,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getSliceIdsFieldBuilder();
+          getConfigRulesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (sliceIdsBuilder_ == null) {
-          sliceIds_ = java.util.Collections.emptyList();
+        if (configRulesBuilder_ == null) {
+          configRules_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          sliceIdsBuilder_.clear();
+          configRulesBuilder_.clear();
         }
         return this;
       }
@@ -34017,17 +34220,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceConfig_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceIdList getDefaultInstanceForType() {
-        return context.ContextOuterClass.SliceIdList.getDefaultInstance();
+      public context.ContextOuterClass.SliceConfig getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceConfig.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceIdList build() {
-        context.ContextOuterClass.SliceIdList result = buildPartial();
+      public context.ContextOuterClass.SliceConfig build() {
+        context.ContextOuterClass.SliceConfig result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -34035,17 +34238,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceIdList buildPartial() {
-        context.ContextOuterClass.SliceIdList result = new context.ContextOuterClass.SliceIdList(this);
+      public context.ContextOuterClass.SliceConfig buildPartial() {
+        context.ContextOuterClass.SliceConfig result = new context.ContextOuterClass.SliceConfig(this);
         int from_bitField0_ = bitField0_;
-        if (sliceIdsBuilder_ == null) {
+        if (configRulesBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
+            configRules_ = java.util.Collections.unmodifiableList(configRules_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.sliceIds_ = sliceIds_;
+          result.configRules_ = configRules_;
         } else {
-          result.sliceIds_ = sliceIdsBuilder_.build();
+          result.configRules_ = configRulesBuilder_.build();
         }
         onBuilt();
         return result;
@@ -34085,39 +34288,39 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.SliceIdList) {
-          return mergeFrom((context.ContextOuterClass.SliceIdList)other);
+        if (other instanceof context.ContextOuterClass.SliceConfig) {
+          return mergeFrom((context.ContextOuterClass.SliceConfig)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.SliceIdList other) {
-        if (other == context.ContextOuterClass.SliceIdList.getDefaultInstance()) return this;
-        if (sliceIdsBuilder_ == null) {
-          if (!other.sliceIds_.isEmpty()) {
-            if (sliceIds_.isEmpty()) {
-              sliceIds_ = other.sliceIds_;
+      public Builder mergeFrom(context.ContextOuterClass.SliceConfig other) {
+        if (other == context.ContextOuterClass.SliceConfig.getDefaultInstance()) return this;
+        if (configRulesBuilder_ == null) {
+          if (!other.configRules_.isEmpty()) {
+            if (configRules_.isEmpty()) {
+              configRules_ = other.configRules_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureSliceIdsIsMutable();
-              sliceIds_.addAll(other.sliceIds_);
+              ensureConfigRulesIsMutable();
+              configRules_.addAll(other.configRules_);
             }
             onChanged();
           }
         } else {
-          if (!other.sliceIds_.isEmpty()) {
-            if (sliceIdsBuilder_.isEmpty()) {
-              sliceIdsBuilder_.dispose();
-              sliceIdsBuilder_ = null;
-              sliceIds_ = other.sliceIds_;
+          if (!other.configRules_.isEmpty()) {
+            if (configRulesBuilder_.isEmpty()) {
+              configRulesBuilder_.dispose();
+              configRulesBuilder_ = null;
+              configRules_ = other.configRules_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              sliceIdsBuilder_ = 
+              configRulesBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSliceIdsFieldBuilder() : null;
+                   getConfigRulesFieldBuilder() : null;
             } else {
-              sliceIdsBuilder_.addAllMessages(other.sliceIds_);
+              configRulesBuilder_.addAllMessages(other.configRules_);
             }
           }
         }
@@ -34136,11 +34339,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.SliceIdList parsedMessage = null;
+        context.ContextOuterClass.SliceConfig parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.SliceIdList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.SliceConfig) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -34151,244 +34354,244 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.SliceId> sliceIds_ =
+      private java.util.List<context.ContextOuterClass.ConfigRule> configRules_ =
         java.util.Collections.emptyList();
-      private void ensureSliceIdsIsMutable() {
+      private void ensureConfigRulesIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>(sliceIds_);
+          configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>(configRules_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdsBuilder_;
+          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> configRulesBuilder_;
 
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.SliceId> getSliceIdsList() {
-        if (sliceIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(sliceIds_);
+      public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
+        if (configRulesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(configRules_);
         } else {
-          return sliceIdsBuilder_.getMessageList();
+          return configRulesBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public int getSliceIdsCount() {
-        if (sliceIdsBuilder_ == null) {
-          return sliceIds_.size();
+      public int getConfigRulesCount() {
+        if (configRulesBuilder_ == null) {
+          return configRules_.size();
         } else {
-          return sliceIdsBuilder_.getCount();
+          return configRulesBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.SliceId getSliceIds(int index) {
-        if (sliceIdsBuilder_ == null) {
-          return sliceIds_.get(index);
+      public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
+        if (configRulesBuilder_ == null) {
+          return configRules_.get(index);
         } else {
-          return sliceIdsBuilder_.getMessage(index);
+          return configRulesBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder setSliceIds(
-          int index, context.ContextOuterClass.SliceId value) {
-        if (sliceIdsBuilder_ == null) {
+      public Builder setConfigRules(
+          int index, context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSliceIdsIsMutable();
-          sliceIds_.set(index, value);
+          ensureConfigRulesIsMutable();
+          configRules_.set(index, value);
           onChanged();
         } else {
-          sliceIdsBuilder_.setMessage(index, value);
+          configRulesBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder setSliceIds(
-          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
-          sliceIds_.set(index, builderForValue.build());
+      public Builder setConfigRules(
+          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.set(index, builderForValue.build());
           onChanged();
         } else {
-          sliceIdsBuilder_.setMessage(index, builderForValue.build());
+          configRulesBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addSliceIds(context.ContextOuterClass.SliceId value) {
-        if (sliceIdsBuilder_ == null) {
+      public Builder addConfigRules(context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSliceIdsIsMutable();
-          sliceIds_.add(value);
+          ensureConfigRulesIsMutable();
+          configRules_.add(value);
           onChanged();
         } else {
-          sliceIdsBuilder_.addMessage(value);
+          configRulesBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addSliceIds(
-          int index, context.ContextOuterClass.SliceId value) {
-        if (sliceIdsBuilder_ == null) {
+      public Builder addConfigRules(
+          int index, context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSliceIdsIsMutable();
-          sliceIds_.add(index, value);
+          ensureConfigRulesIsMutable();
+          configRules_.add(index, value);
           onChanged();
         } else {
-          sliceIdsBuilder_.addMessage(index, value);
+          configRulesBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addSliceIds(
-          context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
-          sliceIds_.add(builderForValue.build());
+      public Builder addConfigRules(
+          context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.add(builderForValue.build());
           onChanged();
         } else {
-          sliceIdsBuilder_.addMessage(builderForValue.build());
+          configRulesBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addSliceIds(
-          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
-          sliceIds_.add(index, builderForValue.build());
+      public Builder addConfigRules(
+          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.add(index, builderForValue.build());
           onChanged();
         } else {
-          sliceIdsBuilder_.addMessage(index, builderForValue.build());
+          configRulesBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addAllSliceIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.SliceId> values) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
+      public Builder addAllConfigRules(
+          java.lang.Iterable<? extends context.ContextOuterClass.ConfigRule> values) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, sliceIds_);
+              values, configRules_);
           onChanged();
         } else {
-          sliceIdsBuilder_.addAllMessages(values);
+          configRulesBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder clearSliceIds() {
-        if (sliceIdsBuilder_ == null) {
-          sliceIds_ = java.util.Collections.emptyList();
+      public Builder clearConfigRules() {
+        if (configRulesBuilder_ == null) {
+          configRules_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          sliceIdsBuilder_.clear();
+          configRulesBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder removeSliceIds(int index) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
-          sliceIds_.remove(index);
+      public Builder removeConfigRules(int index) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.remove(index);
           onChanged();
         } else {
-          sliceIdsBuilder_.remove(index);
+          configRulesBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.SliceId.Builder getSliceIdsBuilder(
+      public context.ContextOuterClass.ConfigRule.Builder getConfigRulesBuilder(
           int index) {
-        return getSliceIdsFieldBuilder().getBuilder(index);
+        return getConfigRulesFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
+      public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
           int index) {
-        if (sliceIdsBuilder_ == null) {
-          return sliceIds_.get(index);  } else {
-          return sliceIdsBuilder_.getMessageOrBuilder(index);
+        if (configRulesBuilder_ == null) {
+          return configRules_.get(index);  } else {
+          return configRulesBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
-           getSliceIdsOrBuilderList() {
-        if (sliceIdsBuilder_ != null) {
-          return sliceIdsBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+           getConfigRulesOrBuilderList() {
+        if (configRulesBuilder_ != null) {
+          return configRulesBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(sliceIds_);
+          return java.util.Collections.unmodifiableList(configRules_);
         }
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.SliceId.Builder addSliceIdsBuilder() {
-        return getSliceIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.SliceId.getDefaultInstance());
+      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder() {
+        return getConfigRulesFieldBuilder().addBuilder(
+            context.ContextOuterClass.ConfigRule.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.SliceId.Builder addSliceIdsBuilder(
+      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder(
           int index) {
-        return getSliceIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.SliceId.getDefaultInstance());
+        return getConfigRulesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ConfigRule.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.SliceId.Builder> 
-           getSliceIdsBuilderList() {
-        return getSliceIdsFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.ConfigRule.Builder> 
+           getConfigRulesBuilderList() {
+        return getConfigRulesFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
-          getSliceIdsFieldBuilder() {
-        if (sliceIdsBuilder_ == null) {
-          sliceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
-                  sliceIds_,
+          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> 
+          getConfigRulesFieldBuilder() {
+        if (configRulesBuilder_ == null) {
+          configRulesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder>(
+                  configRules_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          sliceIds_ = null;
+          configRules_ = null;
         }
-        return sliceIdsBuilder_;
+        return configRulesBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -34403,95 +34606,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.SliceIdList)
+      // @@protoc_insertion_point(builder_scope:context.SliceConfig)
     }
 
-    // @@protoc_insertion_point(class_scope:context.SliceIdList)
-    private static final context.ContextOuterClass.SliceIdList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceConfig)
+    private static final context.ContextOuterClass.SliceConfig DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceIdList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceConfig();
     }
 
-    public static context.ContextOuterClass.SliceIdList getDefaultInstance() {
+    public static context.ContextOuterClass.SliceConfig getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SliceIdList>
-        PARSER = new com.google.protobuf.AbstractParser<SliceIdList>() {
+    private static final com.google.protobuf.Parser<SliceConfig>
+        PARSER = new com.google.protobuf.AbstractParser<SliceConfig>() {
       @java.lang.Override
-      public SliceIdList parsePartialFrom(
+      public SliceConfig parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SliceIdList(input, extensionRegistry);
+        return new SliceConfig(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SliceIdList> parser() {
+    public static com.google.protobuf.Parser<SliceConfig> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SliceIdList> getParserForType() {
+    public com.google.protobuf.Parser<SliceConfig> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.SliceIdList getDefaultInstanceForType() {
+    public context.ContextOuterClass.SliceConfig getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SliceListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.SliceList)
+  public interface SliceIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceIdList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
-    java.util.List<context.ContextOuterClass.Slice> 
-        getSlicesList();
+    java.util.List<context.ContextOuterClass.SliceId> 
+        getSliceIdsList();
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
-    context.ContextOuterClass.Slice getSlices(int index);
+    context.ContextOuterClass.SliceId getSliceIds(int index);
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
-    int getSlicesCount();
+    int getSliceIdsCount();
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
-    java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
-        getSlicesOrBuilderList();
+    java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+        getSliceIdsOrBuilderList();
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
-    context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
+    context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
         int index);
   }
   /**
-   * Protobuf type {@code context.SliceList}
+   * Protobuf type {@code context.SliceIdList}
    */
-  public static final class SliceList extends
+  public static final class SliceIdList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.SliceList)
-      SliceListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceIdList)
+      SliceIdListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SliceList.newBuilder() to construct.
-    private SliceList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceIdList.newBuilder() to construct.
+    private SliceIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SliceList() {
-      slices_ = java.util.Collections.emptyList();
+    private SliceIdList() {
+      sliceIds_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SliceList();
+      return new SliceIdList();
     }
 
     @java.lang.Override
@@ -34499,7 +34702,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SliceList(
+    private SliceIdList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -34520,11 +34723,11 @@ public final class ContextOuterClass {
               break;
             case 10: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                slices_ = new java.util.ArrayList<context.ContextOuterClass.Slice>();
+                sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              slices_.add(
-                  input.readMessage(context.ContextOuterClass.Slice.parser(), extensionRegistry));
+              sliceIds_.add(
+                  input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -34543,7 +34746,7 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          slices_ = java.util.Collections.unmodifiableList(slices_);
+          sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -34551,55 +34754,55 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
+      return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_SliceList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceIdList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.SliceList.class, context.ContextOuterClass.SliceList.Builder.class);
+              context.ContextOuterClass.SliceIdList.class, context.ContextOuterClass.SliceIdList.Builder.class);
     }
 
-    public static final int SLICES_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.Slice> slices_;
+    public static final int SLICE_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.SliceId> sliceIds_;
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Slice> getSlicesList() {
-      return slices_;
+    public java.util.List<context.ContextOuterClass.SliceId> getSliceIdsList() {
+      return sliceIds_;
     }
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
-        getSlicesOrBuilderList() {
-      return slices_;
+    public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+        getSliceIdsOrBuilderList() {
+      return sliceIds_;
     }
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
     @java.lang.Override
-    public int getSlicesCount() {
-      return slices_.size();
+    public int getSliceIdsCount() {
+      return sliceIds_.size();
     }
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Slice getSlices(int index) {
-      return slices_.get(index);
+    public context.ContextOuterClass.SliceId getSliceIds(int index) {
+      return sliceIds_.get(index);
     }
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
+    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
         int index) {
-      return slices_.get(index);
+      return sliceIds_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -34616,8 +34819,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < slices_.size(); i++) {
-        output.writeMessage(1, slices_.get(i));
+      for (int i = 0; i < sliceIds_.size(); i++) {
+        output.writeMessage(1, sliceIds_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -34628,9 +34831,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < slices_.size(); i++) {
+      for (int i = 0; i < sliceIds_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, slices_.get(i));
+          .computeMessageSize(1, sliceIds_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -34642,13 +34845,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.SliceList)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceIdList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.SliceList other = (context.ContextOuterClass.SliceList) obj;
+      context.ContextOuterClass.SliceIdList other = (context.ContextOuterClass.SliceIdList) obj;
 
-      if (!getSlicesList()
-          .equals(other.getSlicesList())) return false;
+      if (!getSliceIdsList()
+          .equals(other.getSliceIdsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -34660,78 +34863,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getSlicesCount() > 0) {
-        hash = (37 * hash) + SLICES_FIELD_NUMBER;
-        hash = (53 * hash) + getSlicesList().hashCode();
+      if (getSliceIdsCount() > 0) {
+        hash = (37 * hash) + SLICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceIdsList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceIdList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceIdList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceIdList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceList parseDelimitedFrom(
+    public static context.ContextOuterClass.SliceIdList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -34744,7 +34947,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.SliceList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceIdList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -34760,26 +34963,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.SliceList}
+     * Protobuf type {@code context.SliceIdList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.SliceList)
-        context.ContextOuterClass.SliceListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.SliceIdList)
+        context.ContextOuterClass.SliceIdListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_SliceList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceIdList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.SliceList.class, context.ContextOuterClass.SliceList.Builder.class);
+                context.ContextOuterClass.SliceIdList.class, context.ContextOuterClass.SliceIdList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.SliceList.newBuilder()
+      // Construct using context.ContextOuterClass.SliceIdList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -34792,17 +34995,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getSlicesFieldBuilder();
+          getSliceIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (slicesBuilder_ == null) {
-          slices_ = java.util.Collections.emptyList();
+        if (sliceIdsBuilder_ == null) {
+          sliceIds_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          slicesBuilder_.clear();
+          sliceIdsBuilder_.clear();
         }
         return this;
       }
@@ -34810,17 +35013,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceList getDefaultInstanceForType() {
-        return context.ContextOuterClass.SliceList.getDefaultInstance();
+      public context.ContextOuterClass.SliceIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceIdList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceList build() {
-        context.ContextOuterClass.SliceList result = buildPartial();
+      public context.ContextOuterClass.SliceIdList build() {
+        context.ContextOuterClass.SliceIdList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -34828,17 +35031,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceList buildPartial() {
-        context.ContextOuterClass.SliceList result = new context.ContextOuterClass.SliceList(this);
+      public context.ContextOuterClass.SliceIdList buildPartial() {
+        context.ContextOuterClass.SliceIdList result = new context.ContextOuterClass.SliceIdList(this);
         int from_bitField0_ = bitField0_;
-        if (slicesBuilder_ == null) {
+        if (sliceIdsBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            slices_ = java.util.Collections.unmodifiableList(slices_);
+            sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.slices_ = slices_;
+          result.sliceIds_ = sliceIds_;
         } else {
-          result.slices_ = slicesBuilder_.build();
+          result.sliceIds_ = sliceIdsBuilder_.build();
         }
         onBuilt();
         return result;
@@ -34878,39 +35081,39 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.SliceList) {
-          return mergeFrom((context.ContextOuterClass.SliceList)other);
+        if (other instanceof context.ContextOuterClass.SliceIdList) {
+          return mergeFrom((context.ContextOuterClass.SliceIdList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.SliceList other) {
-        if (other == context.ContextOuterClass.SliceList.getDefaultInstance()) return this;
-        if (slicesBuilder_ == null) {
-          if (!other.slices_.isEmpty()) {
-            if (slices_.isEmpty()) {
-              slices_ = other.slices_;
+      public Builder mergeFrom(context.ContextOuterClass.SliceIdList other) {
+        if (other == context.ContextOuterClass.SliceIdList.getDefaultInstance()) return this;
+        if (sliceIdsBuilder_ == null) {
+          if (!other.sliceIds_.isEmpty()) {
+            if (sliceIds_.isEmpty()) {
+              sliceIds_ = other.sliceIds_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureSlicesIsMutable();
-              slices_.addAll(other.slices_);
+              ensureSliceIdsIsMutable();
+              sliceIds_.addAll(other.sliceIds_);
             }
             onChanged();
           }
         } else {
-          if (!other.slices_.isEmpty()) {
-            if (slicesBuilder_.isEmpty()) {
-              slicesBuilder_.dispose();
-              slicesBuilder_ = null;
-              slices_ = other.slices_;
+          if (!other.sliceIds_.isEmpty()) {
+            if (sliceIdsBuilder_.isEmpty()) {
+              sliceIdsBuilder_.dispose();
+              sliceIdsBuilder_ = null;
+              sliceIds_ = other.sliceIds_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              slicesBuilder_ = 
+              sliceIdsBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSlicesFieldBuilder() : null;
+                   getSliceIdsFieldBuilder() : null;
             } else {
-              slicesBuilder_.addAllMessages(other.slices_);
+              sliceIdsBuilder_.addAllMessages(other.sliceIds_);
             }
           }
         }
@@ -34929,11 +35132,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.SliceList parsedMessage = null;
+        context.ContextOuterClass.SliceIdList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.SliceList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.SliceIdList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -34944,244 +35147,244 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.Slice> slices_ =
+      private java.util.List<context.ContextOuterClass.SliceId> sliceIds_ =
         java.util.Collections.emptyList();
-      private void ensureSlicesIsMutable() {
+      private void ensureSliceIdsIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          slices_ = new java.util.ArrayList<context.ContextOuterClass.Slice>(slices_);
+          sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>(sliceIds_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder> slicesBuilder_;
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdsBuilder_;
 
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.Slice> getSlicesList() {
-        if (slicesBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(slices_);
+      public java.util.List<context.ContextOuterClass.SliceId> getSliceIdsList() {
+        if (sliceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(sliceIds_);
         } else {
-          return slicesBuilder_.getMessageList();
+          return sliceIdsBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public int getSlicesCount() {
-        if (slicesBuilder_ == null) {
-          return slices_.size();
+      public int getSliceIdsCount() {
+        if (sliceIdsBuilder_ == null) {
+          return sliceIds_.size();
         } else {
-          return slicesBuilder_.getCount();
+          return sliceIdsBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.Slice getSlices(int index) {
-        if (slicesBuilder_ == null) {
-          return slices_.get(index);
+      public context.ContextOuterClass.SliceId getSliceIds(int index) {
+        if (sliceIdsBuilder_ == null) {
+          return sliceIds_.get(index);
         } else {
-          return slicesBuilder_.getMessage(index);
+          return sliceIdsBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder setSlices(
-          int index, context.ContextOuterClass.Slice value) {
-        if (slicesBuilder_ == null) {
+      public Builder setSliceIds(
+          int index, context.ContextOuterClass.SliceId value) {
+        if (sliceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSlicesIsMutable();
-          slices_.set(index, value);
+          ensureSliceIdsIsMutable();
+          sliceIds_.set(index, value);
           onChanged();
         } else {
-          slicesBuilder_.setMessage(index, value);
+          sliceIdsBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder setSlices(
-          int index, context.ContextOuterClass.Slice.Builder builderForValue) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
-          slices_.set(index, builderForValue.build());
+      public Builder setSliceIds(
+          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          sliceIds_.set(index, builderForValue.build());
           onChanged();
         } else {
-          slicesBuilder_.setMessage(index, builderForValue.build());
+          sliceIdsBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder addSlices(context.ContextOuterClass.Slice value) {
-        if (slicesBuilder_ == null) {
+      public Builder addSliceIds(context.ContextOuterClass.SliceId value) {
+        if (sliceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSlicesIsMutable();
-          slices_.add(value);
+          ensureSliceIdsIsMutable();
+          sliceIds_.add(value);
           onChanged();
         } else {
-          slicesBuilder_.addMessage(value);
+          sliceIdsBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder addSlices(
-          int index, context.ContextOuterClass.Slice value) {
-        if (slicesBuilder_ == null) {
+      public Builder addSliceIds(
+          int index, context.ContextOuterClass.SliceId value) {
+        if (sliceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSlicesIsMutable();
-          slices_.add(index, value);
+          ensureSliceIdsIsMutable();
+          sliceIds_.add(index, value);
           onChanged();
         } else {
-          slicesBuilder_.addMessage(index, value);
+          sliceIdsBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder addSlices(
-          context.ContextOuterClass.Slice.Builder builderForValue) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
-          slices_.add(builderForValue.build());
+      public Builder addSliceIds(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          sliceIds_.add(builderForValue.build());
           onChanged();
         } else {
-          slicesBuilder_.addMessage(builderForValue.build());
+          sliceIdsBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder addSlices(
-          int index, context.ContextOuterClass.Slice.Builder builderForValue) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
-          slices_.add(index, builderForValue.build());
+      public Builder addSliceIds(
+          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          sliceIds_.add(index, builderForValue.build());
           onChanged();
         } else {
-          slicesBuilder_.addMessage(index, builderForValue.build());
+          sliceIdsBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder addAllSlices(
-          java.lang.Iterable<? extends context.ContextOuterClass.Slice> values) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
+      public Builder addAllSliceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.SliceId> values) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, slices_);
+              values, sliceIds_);
           onChanged();
         } else {
-          slicesBuilder_.addAllMessages(values);
+          sliceIdsBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder clearSlices() {
-        if (slicesBuilder_ == null) {
-          slices_ = java.util.Collections.emptyList();
+      public Builder clearSliceIds() {
+        if (sliceIdsBuilder_ == null) {
+          sliceIds_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          slicesBuilder_.clear();
+          sliceIdsBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder removeSlices(int index) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
-          slices_.remove(index);
+      public Builder removeSliceIds(int index) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          sliceIds_.remove(index);
           onChanged();
         } else {
-          slicesBuilder_.remove(index);
+          sliceIdsBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.Slice.Builder getSlicesBuilder(
+      public context.ContextOuterClass.SliceId.Builder getSliceIdsBuilder(
           int index) {
-        return getSlicesFieldBuilder().getBuilder(index);
+        return getSliceIdsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
+      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
           int index) {
-        if (slicesBuilder_ == null) {
-          return slices_.get(index);  } else {
-          return slicesBuilder_.getMessageOrBuilder(index);
+        if (sliceIdsBuilder_ == null) {
+          return sliceIds_.get(index);  } else {
+          return sliceIdsBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
-           getSlicesOrBuilderList() {
-        if (slicesBuilder_ != null) {
-          return slicesBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+           getSliceIdsOrBuilderList() {
+        if (sliceIdsBuilder_ != null) {
+          return sliceIdsBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(slices_);
+          return java.util.Collections.unmodifiableList(sliceIds_);
         }
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.Slice.Builder addSlicesBuilder() {
-        return getSlicesFieldBuilder().addBuilder(
-            context.ContextOuterClass.Slice.getDefaultInstance());
+      public context.ContextOuterClass.SliceId.Builder addSliceIdsBuilder() {
+        return getSliceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.SliceId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.Slice.Builder addSlicesBuilder(
+      public context.ContextOuterClass.SliceId.Builder addSliceIdsBuilder(
           int index) {
-        return getSlicesFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Slice.getDefaultInstance());
+        return getSliceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.SliceId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.Slice.Builder> 
-           getSlicesBuilderList() {
-        return getSlicesFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.SliceId.Builder> 
+           getSliceIdsBuilderList() {
+        return getSliceIdsFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder> 
-          getSlicesFieldBuilder() {
-        if (slicesBuilder_ == null) {
-          slicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder>(
-                  slices_,
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
+          getSliceIdsFieldBuilder() {
+        if (sliceIdsBuilder_ == null) {
+          sliceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
+                  sliceIds_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          slices_ = null;
+          sliceIds_ = null;
         }
-        return slicesBuilder_;
+        return sliceIdsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -35196,100 +35399,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.SliceList)
+      // @@protoc_insertion_point(builder_scope:context.SliceIdList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.SliceList)
-    private static final context.ContextOuterClass.SliceList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceIdList)
+    private static final context.ContextOuterClass.SliceIdList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceIdList();
     }
 
-    public static context.ContextOuterClass.SliceList getDefaultInstance() {
+    public static context.ContextOuterClass.SliceIdList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SliceList>
-        PARSER = new com.google.protobuf.AbstractParser<SliceList>() {
+    private static final com.google.protobuf.Parser<SliceIdList>
+        PARSER = new com.google.protobuf.AbstractParser<SliceIdList>() {
       @java.lang.Override
-      public SliceList parsePartialFrom(
+      public SliceIdList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SliceList(input, extensionRegistry);
+        return new SliceIdList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SliceList> parser() {
+    public static com.google.protobuf.Parser<SliceIdList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SliceList> getParserForType() {
+    public com.google.protobuf.Parser<SliceIdList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.SliceList getDefaultInstanceForType() {
+    public context.ContextOuterClass.SliceIdList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SliceEventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.SliceEvent)
+  public interface SliceListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    boolean hasEvent();
+    java.util.List<context.ContextOuterClass.Slice> 
+        getSlicesList();
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    context.ContextOuterClass.Event getEvent();
+    context.ContextOuterClass.Slice getSlices(int index);
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
-
+    int getSlicesCount();
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
-     * @return Whether the sliceId field is set.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    boolean hasSliceId();
+    java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
+        getSlicesOrBuilderList();
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
-     * @return The sliceId.
-     */
-    context.ContextOuterClass.SliceId getSliceId();
-    /**
-     * <code>.context.SliceId slice_id = 2;</code>
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
+    context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
+        int index);
   }
   /**
-   * Protobuf type {@code context.SliceEvent}
+   * Protobuf type {@code context.SliceList}
    */
-  public static final class SliceEvent extends
+  public static final class SliceList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.SliceEvent)
-      SliceEventOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceList)
+      SliceListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SliceEvent.newBuilder() to construct.
-    private SliceEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceList.newBuilder() to construct.
+    private SliceList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SliceEvent() {
+    private SliceList() {
+      slices_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SliceEvent();
+      return new SliceList();
     }
 
     @java.lang.Override
@@ -35297,7 +35495,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SliceEvent(
+    private SliceList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -35305,6 +35503,7 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -35316,29 +35515,12 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Event.Builder subBuilder = null;
-              if (event_ != null) {
-                subBuilder = event_.toBuilder();
-              }
-              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(event_);
-                event_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              context.ContextOuterClass.SliceId.Builder subBuilder = null;
-              if (sliceId_ != null) {
-                subBuilder = sliceId_.toBuilder();
-              }
-              sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(sliceId_);
-                sliceId_ = subBuilder.buildPartial();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                slices_ = new java.util.ArrayList<context.ContextOuterClass.Slice>();
+                mutable_bitField0_ |= 0x00000001;
               }
-
+              slices_.add(
+                  input.readMessage(context.ContextOuterClass.Slice.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -35356,73 +35538,64 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          slices_ = java.util.Collections.unmodifiableList(slices_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
+      return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_SliceEvent_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.SliceEvent.class, context.ContextOuterClass.SliceEvent.Builder.class);
+              context.ContextOuterClass.SliceList.class, context.ContextOuterClass.SliceList.Builder.class);
     }
 
-    public static final int EVENT_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Event event_;
-    /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
-     */
-    @java.lang.Override
-    public boolean hasEvent() {
-      return event_ != null;
-    }
+    public static final int SLICES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Slice> slices_;
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Event getEvent() {
-      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    public java.util.List<context.ContextOuterClass.Slice> getSlicesList() {
+      return slices_;
     }
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-      return getEvent();
+    public java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
+        getSlicesOrBuilderList() {
+      return slices_;
     }
-
-    public static final int SLICE_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.SliceId sliceId_;
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
-     * @return Whether the sliceId field is set.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public boolean hasSliceId() {
-      return sliceId_ != null;
+    public int getSlicesCount() {
+      return slices_.size();
     }
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
-     * @return The sliceId.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceId getSliceId() {
-      return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+    public context.ContextOuterClass.Slice getSlices(int index) {
+      return slices_.get(index);
     }
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
-      return getSliceId();
+    public context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
+        int index) {
+      return slices_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -35439,11 +35612,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (event_ != null) {
-        output.writeMessage(1, getEvent());
-      }
-      if (sliceId_ != null) {
-        output.writeMessage(2, getSliceId());
+      for (int i = 0; i < slices_.size(); i++) {
+        output.writeMessage(1, slices_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -35454,13 +35624,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (event_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEvent());
-      }
-      if (sliceId_ != null) {
+      for (int i = 0; i < slices_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getSliceId());
+          .computeMessageSize(1, slices_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -35472,21 +35638,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.SliceEvent)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.SliceEvent other = (context.ContextOuterClass.SliceEvent) obj;
+      context.ContextOuterClass.SliceList other = (context.ContextOuterClass.SliceList) obj;
 
-      if (hasEvent() != other.hasEvent()) return false;
-      if (hasEvent()) {
-        if (!getEvent()
-            .equals(other.getEvent())) return false;
-      }
-      if (hasSliceId() != other.hasSliceId()) return false;
-      if (hasSliceId()) {
-        if (!getSliceId()
-            .equals(other.getSliceId())) return false;
-      }
+      if (!getSlicesList()
+          .equals(other.getSlicesList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -35498,82 +35656,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasEvent()) {
-        hash = (37 * hash) + EVENT_FIELD_NUMBER;
-        hash = (53 * hash) + getEvent().hashCode();
-      }
-      if (hasSliceId()) {
-        hash = (37 * hash) + SLICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceId().hashCode();
+      if (getSlicesCount() > 0) {
+        hash = (37 * hash) + SLICES_FIELD_NUMBER;
+        hash = (53 * hash) + getSlicesList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceEvent parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceEvent parseDelimitedFrom(
+    public static context.ContextOuterClass.SliceList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -35586,7 +35740,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.SliceEvent prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -35602,26 +35756,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.SliceEvent}
+     * Protobuf type {@code context.SliceList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.SliceEvent)
-        context.ContextOuterClass.SliceEventOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.SliceList)
+        context.ContextOuterClass.SliceListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_SliceEvent_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.SliceEvent.class, context.ContextOuterClass.SliceEvent.Builder.class);
+                context.ContextOuterClass.SliceList.class, context.ContextOuterClass.SliceList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.SliceEvent.newBuilder()
+      // Construct using context.ContextOuterClass.SliceList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -35634,22 +35788,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getSlicesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (eventBuilder_ == null) {
-          event_ = null;
-        } else {
-          event_ = null;
-          eventBuilder_ = null;
-        }
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = null;
+        if (slicesBuilder_ == null) {
+          slices_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          sliceId_ = null;
-          sliceIdBuilder_ = null;
+          slicesBuilder_.clear();
         }
         return this;
       }
@@ -35657,17 +35806,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceEvent getDefaultInstanceForType() {
-        return context.ContextOuterClass.SliceEvent.getDefaultInstance();
+      public context.ContextOuterClass.SliceList getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceEvent build() {
-        context.ContextOuterClass.SliceEvent result = buildPartial();
+      public context.ContextOuterClass.SliceList build() {
+        context.ContextOuterClass.SliceList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -35675,17 +35824,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceEvent buildPartial() {
-        context.ContextOuterClass.SliceEvent result = new context.ContextOuterClass.SliceEvent(this);
-        if (eventBuilder_ == null) {
-          result.event_ = event_;
-        } else {
-          result.event_ = eventBuilder_.build();
-        }
-        if (sliceIdBuilder_ == null) {
-          result.sliceId_ = sliceId_;
+      public context.ContextOuterClass.SliceList buildPartial() {
+        context.ContextOuterClass.SliceList result = new context.ContextOuterClass.SliceList(this);
+        int from_bitField0_ = bitField0_;
+        if (slicesBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            slices_ = java.util.Collections.unmodifiableList(slices_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.slices_ = slices_;
         } else {
-          result.sliceId_ = sliceIdBuilder_.build();
+          result.slices_ = slicesBuilder_.build();
         }
         onBuilt();
         return result;
@@ -35725,25 +35874,45 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.SliceEvent) {
-          return mergeFrom((context.ContextOuterClass.SliceEvent)other);
+        if (other instanceof context.ContextOuterClass.SliceList) {
+          return mergeFrom((context.ContextOuterClass.SliceList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.SliceEvent other) {
-        if (other == context.ContextOuterClass.SliceEvent.getDefaultInstance()) return this;
-        if (other.hasEvent()) {
-          mergeEvent(other.getEvent());
-        }
-        if (other.hasSliceId()) {
-          mergeSliceId(other.getSliceId());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
+      public Builder mergeFrom(context.ContextOuterClass.SliceList other) {
+        if (other == context.ContextOuterClass.SliceList.getDefaultInstance()) return this;
+        if (slicesBuilder_ == null) {
+          if (!other.slices_.isEmpty()) {
+            if (slices_.isEmpty()) {
+              slices_ = other.slices_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureSlicesIsMutable();
+              slices_.addAll(other.slices_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.slices_.isEmpty()) {
+            if (slicesBuilder_.isEmpty()) {
+              slicesBuilder_.dispose();
+              slicesBuilder_ = null;
+              slices_ = other.slices_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              slicesBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getSlicesFieldBuilder() : null;
+            } else {
+              slicesBuilder_.addAllMessages(other.slices_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
       }
 
       @java.lang.Override
@@ -35756,11 +35925,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.SliceEvent parsedMessage = null;
+        context.ContextOuterClass.SliceList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.SliceEvent) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.SliceList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -35769,243 +35938,246 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.Slice> slices_ =
+        java.util.Collections.emptyList();
+      private void ensureSlicesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          slices_ = new java.util.ArrayList<context.ContextOuterClass.Slice>(slices_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder> slicesBuilder_;
 
-      private context.ContextOuterClass.Event event_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return Whether the event field is set.
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public boolean hasEvent() {
-        return eventBuilder_ != null || event_ != null;
+      public java.util.List<context.ContextOuterClass.Slice> getSlicesList() {
+        if (slicesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(slices_);
+        } else {
+          return slicesBuilder_.getMessageList();
+        }
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return The event.
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public context.ContextOuterClass.Event getEvent() {
-        if (eventBuilder_ == null) {
-          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+      public int getSlicesCount() {
+        if (slicesBuilder_ == null) {
+          return slices_.size();
         } else {
-          return eventBuilder_.getMessage();
+          return slicesBuilder_.getCount();
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder setEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
+      public context.ContextOuterClass.Slice getSlices(int index) {
+        if (slicesBuilder_ == null) {
+          return slices_.get(index);
+        } else {
+          return slicesBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Slice slices = 1;</code>
+       */
+      public Builder setSlices(
+          int index, context.ContextOuterClass.Slice value) {
+        if (slicesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          event_ = value;
+          ensureSlicesIsMutable();
+          slices_.set(index, value);
           onChanged();
         } else {
-          eventBuilder_.setMessage(value);
+          slicesBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder setEvent(
-          context.ContextOuterClass.Event.Builder builderForValue) {
-        if (eventBuilder_ == null) {
-          event_ = builderForValue.build();
+      public Builder setSlices(
+          int index, context.ContextOuterClass.Slice.Builder builderForValue) {
+        if (slicesBuilder_ == null) {
+          ensureSlicesIsMutable();
+          slices_.set(index, builderForValue.build());
           onChanged();
         } else {
-          eventBuilder_.setMessage(builderForValue.build());
+          slicesBuilder_.setMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder mergeEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
-          if (event_ != null) {
-            event_ =
-              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
-          } else {
-            event_ = value;
+      public Builder addSlices(context.ContextOuterClass.Slice value) {
+        if (slicesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureSlicesIsMutable();
+          slices_.add(value);
           onChanged();
         } else {
-          eventBuilder_.mergeFrom(value);
+          slicesBuilder_.addMessage(value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder clearEvent() {
-        if (eventBuilder_ == null) {
-          event_ = null;
+      public Builder addSlices(
+          int index, context.ContextOuterClass.Slice value) {
+        if (slicesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSlicesIsMutable();
+          slices_.add(index, value);
           onChanged();
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          slicesBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       */
-      public context.ContextOuterClass.Event.Builder getEventBuilder() {
-        
-        onChanged();
-        return getEventFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-        if (eventBuilder_ != null) {
-          return eventBuilder_.getMessageOrBuilder();
+      public Builder addSlices(
+          context.ContextOuterClass.Slice.Builder builderForValue) {
+        if (slicesBuilder_ == null) {
+          ensureSlicesIsMutable();
+          slices_.add(builderForValue.build());
+          onChanged();
         } else {
-          return event_ == null ?
-              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+          slicesBuilder_.addMessage(builderForValue.build());
         }
+        return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
-          getEventFieldBuilder() {
-        if (eventBuilder_ == null) {
-          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
-                  getEvent(),
-                  getParentForChildren(),
-                  isClean());
-          event_ = null;
+      public Builder addSlices(
+          int index, context.ContextOuterClass.Slice.Builder builderForValue) {
+        if (slicesBuilder_ == null) {
+          ensureSlicesIsMutable();
+          slices_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          slicesBuilder_.addMessage(index, builderForValue.build());
         }
-        return eventBuilder_;
-      }
-
-      private context.ContextOuterClass.SliceId sliceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
-      /**
-       * <code>.context.SliceId slice_id = 2;</code>
-       * @return Whether the sliceId field is set.
-       */
-      public boolean hasSliceId() {
-        return sliceIdBuilder_ != null || sliceId_ != null;
+        return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
-       * @return The sliceId.
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public context.ContextOuterClass.SliceId getSliceId() {
-        if (sliceIdBuilder_ == null) {
-          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+      public Builder addAllSlices(
+          java.lang.Iterable<? extends context.ContextOuterClass.Slice> values) {
+        if (slicesBuilder_ == null) {
+          ensureSlicesIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, slices_);
+          onChanged();
         } else {
-          return sliceIdBuilder_.getMessage();
+          slicesBuilder_.addAllMessages(values);
         }
+        return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
-        if (sliceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          sliceId_ = value;
+      public Builder clearSlices() {
+        if (slicesBuilder_ == null) {
+          slices_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          sliceIdBuilder_.setMessage(value);
+          slicesBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder setSliceId(
-          context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = builderForValue.build();
+      public Builder removeSlices(int index) {
+        if (slicesBuilder_ == null) {
+          ensureSlicesIsMutable();
+          slices_.remove(index);
           onChanged();
         } else {
-          sliceIdBuilder_.setMessage(builderForValue.build());
+          slicesBuilder_.remove(index);
         }
-
         return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
-        if (sliceIdBuilder_ == null) {
-          if (sliceId_ != null) {
-            sliceId_ =
-              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
-          } else {
-            sliceId_ = value;
-          }
-          onChanged();
-        } else {
-          sliceIdBuilder_.mergeFrom(value);
+      public context.ContextOuterClass.Slice.Builder getSlicesBuilder(
+          int index) {
+        return getSlicesFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.Slice slices = 1;</code>
+       */
+      public context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
+          int index) {
+        if (slicesBuilder_ == null) {
+          return slices_.get(index);  } else {
+          return slicesBuilder_.getMessageOrBuilder(index);
         }
-
-        return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder clearSliceId() {
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = null;
-          onChanged();
+      public java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
+           getSlicesOrBuilderList() {
+        if (slicesBuilder_ != null) {
+          return slicesBuilder_.getMessageOrBuilderList();
         } else {
-          sliceId_ = null;
-          sliceIdBuilder_ = null;
+          return java.util.Collections.unmodifiableList(slices_);
         }
-
-        return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
-        
-        onChanged();
-        return getSliceIdFieldBuilder().getBuilder();
+      public context.ContextOuterClass.Slice.Builder addSlicesBuilder() {
+        return getSlicesFieldBuilder().addBuilder(
+            context.ContextOuterClass.Slice.getDefaultInstance());
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
-        if (sliceIdBuilder_ != null) {
-          return sliceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return sliceId_ == null ?
-              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
-        }
+      public context.ContextOuterClass.Slice.Builder addSlicesBuilder(
+          int index) {
+        return getSlicesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Slice.getDefaultInstance());
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
-          getSliceIdFieldBuilder() {
-        if (sliceIdBuilder_ == null) {
-          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
-                  getSliceId(),
+      public java.util.List<context.ContextOuterClass.Slice.Builder> 
+           getSlicesBuilderList() {
+        return getSlicesFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder> 
+          getSlicesFieldBuilder() {
+        if (slicesBuilder_ == null) {
+          slicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder>(
+                  slices_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          sliceId_ = null;
+          slices_ = null;
         }
-        return sliceIdBuilder_;
+        return slicesBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -36020,89 +36192,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.SliceEvent)
+      // @@protoc_insertion_point(builder_scope:context.SliceList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.SliceEvent)
-    private static final context.ContextOuterClass.SliceEvent DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceList)
+    private static final context.ContextOuterClass.SliceList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceEvent();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceList();
     }
 
-    public static context.ContextOuterClass.SliceEvent getDefaultInstance() {
+    public static context.ContextOuterClass.SliceList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SliceEvent>
-        PARSER = new com.google.protobuf.AbstractParser<SliceEvent>() {
+    private static final com.google.protobuf.Parser<SliceList>
+        PARSER = new com.google.protobuf.AbstractParser<SliceList>() {
       @java.lang.Override
-      public SliceEvent parsePartialFrom(
+      public SliceList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SliceEvent(input, extensionRegistry);
+        return new SliceList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SliceEvent> parser() {
+    public static com.google.protobuf.Parser<SliceList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SliceEvent> getParserForType() {
+    public com.google.protobuf.Parser<SliceList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.SliceEvent getDefaultInstanceForType() {
+    public context.ContextOuterClass.SliceList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionId)
+  public interface SliceEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceEvent)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
-     * @return Whether the connectionUuid field is set.
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
-    boolean hasConnectionUuid();
+    boolean hasEvent();
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
-     * @return The connectionUuid.
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
-    context.ContextOuterClass.Uuid getConnectionUuid();
+    context.ContextOuterClass.Event getEvent();
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
+     * <code>.context.Event event = 1;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder();
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+
+    /**
+     * <code>.context.SliceId slice_id = 2;</code>
+     * @return Whether the sliceId field is set.
+     */
+    boolean hasSliceId();
+    /**
+     * <code>.context.SliceId slice_id = 2;</code>
+     * @return The sliceId.
+     */
+    context.ContextOuterClass.SliceId getSliceId();
+    /**
+     * <code>.context.SliceId slice_id = 2;</code>
+     */
+    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
   }
   /**
-   * <pre>
-   * ----- Connection ----------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.ConnectionId}
+   * Protobuf type {@code context.SliceEvent}
    */
-  public static final class ConnectionId extends
+  public static final class SliceEvent extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionId)
-      ConnectionIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceEvent)
+      SliceEventOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionId.newBuilder() to construct.
-    private ConnectionId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceEvent.newBuilder() to construct.
+    private SliceEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionId() {
+    private SliceEvent() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionId();
+      return new SliceEvent();
     }
 
     @java.lang.Override
@@ -36110,7 +36293,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionId(
+    private SliceEvent(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -36129,14 +36312,27 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (connectionUuid_ != null) {
-                subBuilder = connectionUuid_.toBuilder();
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
               }
-              connectionUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(connectionUuid_);
-                connectionUuid_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.SliceId.Builder subBuilder = null;
+              if (sliceId_ != null) {
+                subBuilder = sliceId_.toBuilder();
+              }
+              sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(sliceId_);
+                sliceId_ = subBuilder.buildPartial();
               }
 
               break;
@@ -36162,41 +36358,67 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
+      return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionId_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceEvent_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
+              context.ContextOuterClass.SliceEvent.class, context.ContextOuterClass.SliceEvent.Builder.class);
     }
 
-    public static final int CONNECTION_UUID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Uuid connectionUuid_;
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
-     * @return Whether the connectionUuid field is set.
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
     @java.lang.Override
-    public boolean hasConnectionUuid() {
-      return connectionUuid_ != null;
+    public boolean hasEvent() {
+      return event_ != null;
     }
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
-     * @return The connectionUuid.
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getConnectionUuid() {
-      return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
     }
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
+     * <code>.context.Event event = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
-      return getConnectionUuid();
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
+    }
+
+    public static final int SLICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.SliceId sliceId_;
+    /**
+     * <code>.context.SliceId slice_id = 2;</code>
+     * @return Whether the sliceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasSliceId() {
+      return sliceId_ != null;
+    }
+    /**
+     * <code>.context.SliceId slice_id = 2;</code>
+     * @return The sliceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceId getSliceId() {
+      return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+    }
+    /**
+     * <code>.context.SliceId slice_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+      return getSliceId();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -36213,8 +36435,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (connectionUuid_ != null) {
-        output.writeMessage(1, getConnectionUuid());
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
+      }
+      if (sliceId_ != null) {
+        output.writeMessage(2, getSliceId());
       }
       unknownFields.writeTo(output);
     }
@@ -36225,13 +36450,17 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (connectionUuid_ != null) {
+      if (event_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getConnectionUuid());
+          .computeMessageSize(1, getEvent());
       }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
+      if (sliceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getSliceId());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
     }
 
     @java.lang.Override
@@ -36239,15 +36468,20 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionId)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceEvent)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionId other = (context.ContextOuterClass.ConnectionId) obj;
+      context.ContextOuterClass.SliceEvent other = (context.ContextOuterClass.SliceEvent) obj;
 
-      if (hasConnectionUuid() != other.hasConnectionUuid()) return false;
-      if (hasConnectionUuid()) {
-        if (!getConnectionUuid()
-            .equals(other.getConnectionUuid())) return false;
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
+      }
+      if (hasSliceId() != other.hasSliceId()) return false;
+      if (hasSliceId()) {
+        if (!getSliceId()
+            .equals(other.getSliceId())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -36260,78 +36494,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasConnectionUuid()) {
-        hash = (37 * hash) + CONNECTION_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionUuid().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
+      }
+      if (hasSliceId()) {
+        hash = (37 * hash) + SLICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceId().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceEvent parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceEvent parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionId parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceEvent parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionId parseDelimitedFrom(
+    public static context.ContextOuterClass.SliceEvent parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -36344,7 +36582,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionId prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceEvent prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -36360,30 +36598,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Connection ----------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.ConnectionId}
+     * Protobuf type {@code context.SliceEvent}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionId)
-        context.ContextOuterClass.ConnectionIdOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.SliceEvent)
+        context.ContextOuterClass.SliceEventOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionId_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceEvent_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
+                context.ContextOuterClass.SliceEvent.class, context.ContextOuterClass.SliceEvent.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionId.newBuilder()
+      // Construct using context.ContextOuterClass.SliceEvent.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -36401,11 +36635,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (connectionUuidBuilder_ == null) {
-          connectionUuid_ = null;
+        if (eventBuilder_ == null) {
+          event_ = null;
         } else {
-          connectionUuid_ = null;
-          connectionUuidBuilder_ = null;
+          event_ = null;
+          eventBuilder_ = null;
+        }
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
+        } else {
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
         }
         return this;
       }
@@ -36413,17 +36653,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionId.getDefaultInstance();
+      public context.ContextOuterClass.SliceEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceEvent.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionId build() {
-        context.ContextOuterClass.ConnectionId result = buildPartial();
+      public context.ContextOuterClass.SliceEvent build() {
+        context.ContextOuterClass.SliceEvent result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -36431,12 +36671,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionId buildPartial() {
-        context.ContextOuterClass.ConnectionId result = new context.ContextOuterClass.ConnectionId(this);
-        if (connectionUuidBuilder_ == null) {
-          result.connectionUuid_ = connectionUuid_;
+      public context.ContextOuterClass.SliceEvent buildPartial() {
+        context.ContextOuterClass.SliceEvent result = new context.ContextOuterClass.SliceEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
         } else {
-          result.connectionUuid_ = connectionUuidBuilder_.build();
+          result.event_ = eventBuilder_.build();
+        }
+        if (sliceIdBuilder_ == null) {
+          result.sliceId_ = sliceId_;
+        } else {
+          result.sliceId_ = sliceIdBuilder_.build();
         }
         onBuilt();
         return result;
@@ -36476,18 +36721,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionId) {
-          return mergeFrom((context.ContextOuterClass.ConnectionId)other);
+        if (other instanceof context.ContextOuterClass.SliceEvent) {
+          return mergeFrom((context.ContextOuterClass.SliceEvent)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionId other) {
-        if (other == context.ContextOuterClass.ConnectionId.getDefaultInstance()) return this;
-        if (other.hasConnectionUuid()) {
-          mergeConnectionUuid(other.getConnectionUuid());
+      public Builder mergeFrom(context.ContextOuterClass.SliceEvent other) {
+        if (other == context.ContextOuterClass.SliceEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
+        }
+        if (other.hasSliceId()) {
+          mergeSliceId(other.getSliceId());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -36504,11 +36752,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionId parsedMessage = null;
+        context.ContextOuterClass.SliceEvent parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionId) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.SliceEvent) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -36518,214 +36766,339 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private context.ContextOuterClass.Uuid connectionUuid_;
+      private context.ContextOuterClass.Event event_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> connectionUuidBuilder_;
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
-       * @return Whether the connectionUuid field is set.
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
        */
-      public boolean hasConnectionUuid() {
-        return connectionUuidBuilder_ != null || connectionUuid_ != null;
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
-       * @return The connectionUuid.
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
        */
-      public context.ContextOuterClass.Uuid getConnectionUuid() {
-        if (connectionUuidBuilder_ == null) {
-          return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         } else {
-          return connectionUuidBuilder_.getMessage();
+          return eventBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setConnectionUuid(context.ContextOuterClass.Uuid value) {
-        if (connectionUuidBuilder_ == null) {
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          connectionUuid_ = value;
+          event_ = value;
           onChanged();
         } else {
-          connectionUuidBuilder_.setMessage(value);
+          eventBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setConnectionUuid(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (connectionUuidBuilder_ == null) {
-          connectionUuid_ = builderForValue.build();
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
           onChanged();
         } else {
-          connectionUuidBuilder_.setMessage(builderForValue.build());
+          eventBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder mergeConnectionUuid(context.ContextOuterClass.Uuid value) {
-        if (connectionUuidBuilder_ == null) {
-          if (connectionUuid_ != null) {
-            connectionUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(connectionUuid_).mergeFrom(value).buildPartial();
+      public Builder mergeEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (event_ != null) {
+            event_ =
+              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
           } else {
-            connectionUuid_ = value;
+            event_ = value;
           }
           onChanged();
         } else {
-          connectionUuidBuilder_.mergeFrom(value);
+          eventBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder clearConnectionUuid() {
-        if (connectionUuidBuilder_ == null) {
-          connectionUuid_ = null;
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
           onChanged();
         } else {
-          connectionUuid_ = null;
-          connectionUuidBuilder_ = null;
+          event_ = null;
+          eventBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getConnectionUuidBuilder() {
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
         
         onChanged();
-        return getConnectionUuidFieldBuilder().getBuilder();
+        return getEventFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
-        if (connectionUuidBuilder_ != null) {
-          return connectionUuidBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
         } else {
-          return connectionUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getConnectionUuidFieldBuilder() {
-        if (connectionUuidBuilder_ == null) {
-          connectionUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getConnectionUuid(),
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
+          getEventFieldBuilder() {
+        if (eventBuilder_ == null) {
+          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
+                  getEvent(),
                   getParentForChildren(),
                   isClean());
-          connectionUuid_ = null;
+          event_ = null;
         }
-        return connectionUuidBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
+        return eventBuilder_;
       }
 
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
+      private context.ContextOuterClass.SliceId sliceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       * @return Whether the sliceId field is set.
+       */
+      public boolean hasSliceId() {
+        return sliceIdBuilder_ != null || sliceId_ != null;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       * @return The sliceId.
+       */
+      public context.ContextOuterClass.SliceId getSliceId() {
+        if (sliceIdBuilder_ == null) {
+          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+        } else {
+          return sliceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       */
+      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          sliceId_ = value;
+          onChanged();
+        } else {
+          sliceIdBuilder_.setMessage(value);
+        }
 
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       */
+      public Builder setSliceId(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          sliceIdBuilder_.setMessage(builderForValue.build());
+        }
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionId)
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       */
+      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (sliceId_ != null) {
+            sliceId_ =
+              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
+          } else {
+            sliceId_ = value;
+          }
+          onChanged();
+        } else {
+          sliceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       */
+      public Builder clearSliceId() {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
+          onChanged();
+        } else {
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       */
+      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
+        
+        onChanged();
+        return getSliceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       */
+      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+        if (sliceIdBuilder_ != null) {
+          return sliceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return sliceId_ == null ?
+              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+        }
+      }
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
+          getSliceIdFieldBuilder() {
+        if (sliceIdBuilder_ == null) {
+          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
+                  getSliceId(),
+                  getParentForChildren(),
+                  isClean());
+          sliceId_ = null;
+        }
+        return sliceIdBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.SliceEvent)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionId)
-    private static final context.ContextOuterClass.ConnectionId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceEvent)
+    private static final context.ContextOuterClass.SliceEvent DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceEvent();
     }
 
-    public static context.ContextOuterClass.ConnectionId getDefaultInstance() {
+    public static context.ContextOuterClass.SliceEvent getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionId>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionId>() {
+    private static final com.google.protobuf.Parser<SliceEvent>
+        PARSER = new com.google.protobuf.AbstractParser<SliceEvent>() {
       @java.lang.Override
-      public ConnectionId parsePartialFrom(
+      public SliceEvent parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionId(input, extensionRegistry);
+        return new SliceEvent(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionId> parser() {
+    public static com.google.protobuf.Parser<SliceEvent> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionId> getParserForType() {
+    public com.google.protobuf.Parser<SliceEvent> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
+    public context.ContextOuterClass.SliceEvent getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionSettings_L0OrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L0)
+  public interface ConnectionIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionId)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>string lsp_symbolic_name = 1;</code>
-     * @return The lspSymbolicName.
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return Whether the connectionUuid field is set.
      */
-    java.lang.String getLspSymbolicName();
+    boolean hasConnectionUuid();
     /**
-     * <code>string lsp_symbolic_name = 1;</code>
-     * @return The bytes for lspSymbolicName.
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return The connectionUuid.
      */
-    com.google.protobuf.ByteString
-        getLspSymbolicNameBytes();
+    context.ContextOuterClass.Uuid getConnectionUuid();
+    /**
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder();
   }
   /**
-   * Protobuf type {@code context.ConnectionSettings_L0}
+   * <pre>
+   * ----- Connection ----------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.ConnectionId}
    */
-  public static final class ConnectionSettings_L0 extends
+  public static final class ConnectionId extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L0)
-      ConnectionSettings_L0OrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionId)
+      ConnectionIdOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionSettings_L0.newBuilder() to construct.
-    private ConnectionSettings_L0(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionId.newBuilder() to construct.
+    private ConnectionId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionSettings_L0() {
-      lspSymbolicName_ = "";
+    private ConnectionId() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionSettings_L0();
+      return new ConnectionId();
     }
 
     @java.lang.Override
@@ -36733,7 +37106,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionSettings_L0(
+    private ConnectionId(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -36752,9 +37125,16 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              java.lang.String s = input.readStringRequireUtf8();
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (connectionUuid_ != null) {
+                subBuilder = connectionUuid_.toBuilder();
+              }
+              connectionUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(connectionUuid_);
+                connectionUuid_ = subBuilder.buildPartial();
+              }
 
-              lspSymbolicName_ = s;
               break;
             }
             default: {
@@ -36778,57 +37158,45 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionId_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionSettings_L0.class, context.ContextOuterClass.ConnectionSettings_L0.Builder.class);
+              context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
     }
 
-    public static final int LSP_SYMBOLIC_NAME_FIELD_NUMBER = 1;
-    private volatile java.lang.Object lspSymbolicName_;
+    public static final int CONNECTION_UUID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid connectionUuid_;
     /**
-     * <code>string lsp_symbolic_name = 1;</code>
-     * @return The lspSymbolicName.
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return Whether the connectionUuid field is set.
      */
     @java.lang.Override
-    public java.lang.String getLspSymbolicName() {
-      java.lang.Object ref = lspSymbolicName_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        lspSymbolicName_ = s;
-        return s;
-      }
+    public boolean hasConnectionUuid() {
+      return connectionUuid_ != null;
     }
     /**
-     * <code>string lsp_symbolic_name = 1;</code>
-     * @return The bytes for lspSymbolicName.
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return The connectionUuid.
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getLspSymbolicNameBytes() {
-      java.lang.Object ref = lspSymbolicName_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        lspSymbolicName_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public context.ContextOuterClass.Uuid getConnectionUuid() {
+      return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
     }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
+    /**
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
+      return getConnectionUuid();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
     public final boolean isInitialized() {
       byte isInitialized = memoizedIsInitialized;
       if (isInitialized == 1) return true;
@@ -36841,8 +37209,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (!getLspSymbolicNameBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, lspSymbolicName_);
+      if (connectionUuid_ != null) {
+        output.writeMessage(1, getConnectionUuid());
       }
       unknownFields.writeTo(output);
     }
@@ -36853,8 +37221,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (!getLspSymbolicNameBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, lspSymbolicName_);
+      if (connectionUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getConnectionUuid());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -36866,13 +37235,16 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L0)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionId)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionSettings_L0 other = (context.ContextOuterClass.ConnectionSettings_L0) obj;
+      context.ContextOuterClass.ConnectionId other = (context.ContextOuterClass.ConnectionId) obj;
 
-      if (!getLspSymbolicName()
-          .equals(other.getLspSymbolicName())) return false;
+      if (hasConnectionUuid() != other.hasConnectionUuid()) return false;
+      if (hasConnectionUuid()) {
+        if (!getConnectionUuid()
+            .equals(other.getConnectionUuid())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -36884,76 +37256,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + LSP_SYMBOLIC_NAME_FIELD_NUMBER;
-      hash = (53 * hash) + getLspSymbolicName().hashCode();
+      if (hasConnectionUuid()) {
+        hash = (37 * hash) + CONNECTION_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionUuid().hashCode();
+      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionId parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionId parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionId parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionId parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -36966,7 +37340,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L0 prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionId prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -36982,26 +37356,30 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionSettings_L0}
+     * <pre>
+     * ----- Connection ----------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.ConnectionId}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L0)
-        context.ContextOuterClass.ConnectionSettings_L0OrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionId)
+        context.ContextOuterClass.ConnectionIdOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionId_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionSettings_L0.class, context.ContextOuterClass.ConnectionSettings_L0.Builder.class);
+                context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionSettings_L0.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionId.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -37019,25 +37397,29 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        lspSymbolicName_ = "";
-
+        if (connectionUuidBuilder_ == null) {
+          connectionUuid_ = null;
+        } else {
+          connectionUuid_ = null;
+          connectionUuidBuilder_ = null;
+        }
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionId.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L0 build() {
-        context.ContextOuterClass.ConnectionSettings_L0 result = buildPartial();
+      public context.ContextOuterClass.ConnectionId build() {
+        context.ContextOuterClass.ConnectionId result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -37045,9 +37427,13 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L0 buildPartial() {
-        context.ContextOuterClass.ConnectionSettings_L0 result = new context.ContextOuterClass.ConnectionSettings_L0(this);
-        result.lspSymbolicName_ = lspSymbolicName_;
+      public context.ContextOuterClass.ConnectionId buildPartial() {
+        context.ContextOuterClass.ConnectionId result = new context.ContextOuterClass.ConnectionId(this);
+        if (connectionUuidBuilder_ == null) {
+          result.connectionUuid_ = connectionUuid_;
+        } else {
+          result.connectionUuid_ = connectionUuidBuilder_.build();
+        }
         onBuilt();
         return result;
       }
@@ -37086,19 +37472,18 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionSettings_L0) {
-          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L0)other);
+        if (other instanceof context.ContextOuterClass.ConnectionId) {
+          return mergeFrom((context.ContextOuterClass.ConnectionId)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L0 other) {
-        if (other == context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance()) return this;
-        if (!other.getLspSymbolicName().isEmpty()) {
-          lspSymbolicName_ = other.lspSymbolicName_;
-          onChanged();
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionId other) {
+        if (other == context.ContextOuterClass.ConnectionId.getDefaultInstance()) return this;
+        if (other.hasConnectionUuid()) {
+          mergeConnectionUuid(other.getConnectionUuid());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -37115,11 +37500,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionSettings_L0 parsedMessage = null;
+        context.ContextOuterClass.ConnectionId parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L0) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionId) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -37129,208 +37514,214 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private java.lang.Object lspSymbolicName_ = "";
+      private context.ContextOuterClass.Uuid connectionUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> connectionUuidBuilder_;
       /**
-       * <code>string lsp_symbolic_name = 1;</code>
-       * @return The lspSymbolicName.
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       * @return Whether the connectionUuid field is set.
        */
-      public java.lang.String getLspSymbolicName() {
-        java.lang.Object ref = lspSymbolicName_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          lspSymbolicName_ = s;
-          return s;
+      public boolean hasConnectionUuid() {
+        return connectionUuidBuilder_ != null || connectionUuid_ != null;
+      }
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       * @return The connectionUuid.
+       */
+      public context.ContextOuterClass.Uuid getConnectionUuid() {
+        if (connectionUuidBuilder_ == null) {
+          return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
         } else {
-          return (java.lang.String) ref;
+          return connectionUuidBuilder_.getMessage();
         }
       }
       /**
-       * <code>string lsp_symbolic_name = 1;</code>
-       * @return The bytes for lspSymbolicName.
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public com.google.protobuf.ByteString
-          getLspSymbolicNameBytes() {
-        java.lang.Object ref = lspSymbolicName_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          lspSymbolicName_ = b;
-          return b;
+      public Builder setConnectionUuid(context.ContextOuterClass.Uuid value) {
+        if (connectionUuidBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          connectionUuid_ = value;
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          connectionUuidBuilder_.setMessage(value);
         }
+
+        return this;
       }
       /**
-       * <code>string lsp_symbolic_name = 1;</code>
-       * @param value The lspSymbolicName to set.
-       * @return This builder for chaining.
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public Builder setLspSymbolicName(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        lspSymbolicName_ = value;
-        onChanged();
+      public Builder setConnectionUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (connectionUuidBuilder_ == null) {
+          connectionUuid_ = builderForValue.build();
+          onChanged();
+        } else {
+          connectionUuidBuilder_.setMessage(builderForValue.build());
+        }
+
         return this;
       }
       /**
-       * <code>string lsp_symbolic_name = 1;</code>
-       * @return This builder for chaining.
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public Builder clearLspSymbolicName() {
-        
-        lspSymbolicName_ = getDefaultInstance().getLspSymbolicName();
-        onChanged();
+      public Builder mergeConnectionUuid(context.ContextOuterClass.Uuid value) {
+        if (connectionUuidBuilder_ == null) {
+          if (connectionUuid_ != null) {
+            connectionUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(connectionUuid_).mergeFrom(value).buildPartial();
+          } else {
+            connectionUuid_ = value;
+          }
+          onChanged();
+        } else {
+          connectionUuidBuilder_.mergeFrom(value);
+        }
+
         return this;
       }
       /**
-       * <code>string lsp_symbolic_name = 1;</code>
-       * @param value The bytes for lspSymbolicName to set.
-       * @return This builder for chaining.
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public Builder setLspSymbolicNameBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        lspSymbolicName_ = value;
-        onChanged();
+      public Builder clearConnectionUuid() {
+        if (connectionUuidBuilder_ == null) {
+          connectionUuid_ = null;
+          onChanged();
+        } else {
+          connectionUuid_ = null;
+          connectionUuidBuilder_ = null;
+        }
+
         return this;
       }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getConnectionUuidBuilder() {
+        
+        onChanged();
+        return getConnectionUuidFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       */
+      public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
+        if (connectionUuidBuilder_ != null) {
+          return connectionUuidBuilder_.getMessageOrBuilder();
+        } else {
+          return connectionUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
+        }
+      }
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getConnectionUuidFieldBuilder() {
+        if (connectionUuidBuilder_ == null) {
+          connectionUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getConnectionUuid(),
+                  getParentForChildren(),
+                  isClean());
+          connectionUuid_ = null;
+        }
+        return connectionUuidBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
       }
 
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L0)
+
+      // @@protoc_insertion_point(builder_scope:context.ConnectionId)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L0)
-    private static final context.ContextOuterClass.ConnectionSettings_L0 DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionId)
+    private static final context.ContextOuterClass.ConnectionId DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L0();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionId();
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionId getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionSettings_L0>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L0>() {
+    private static final com.google.protobuf.Parser<ConnectionId>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionId>() {
       @java.lang.Override
-      public ConnectionSettings_L0 parsePartialFrom(
+      public ConnectionId parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionSettings_L0(input, extensionRegistry);
+        return new ConnectionId(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionSettings_L0> parser() {
+    public static com.google.protobuf.Parser<ConnectionId> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionSettings_L0> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionId> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionSettings_L2OrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L2)
+  public interface ConnectionSettings_L0OrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L0)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>string src_mac_address = 1;</code>
-     * @return The srcMacAddress.
-     */
-    java.lang.String getSrcMacAddress();
-    /**
-     * <code>string src_mac_address = 1;</code>
-     * @return The bytes for srcMacAddress.
-     */
-    com.google.protobuf.ByteString
-        getSrcMacAddressBytes();
-
-    /**
-     * <code>string dst_mac_address = 2;</code>
-     * @return The dstMacAddress.
+     * <code>string lsp_symbolic_name = 1;</code>
+     * @return The lspSymbolicName.
      */
-    java.lang.String getDstMacAddress();
+    java.lang.String getLspSymbolicName();
     /**
-     * <code>string dst_mac_address = 2;</code>
-     * @return The bytes for dstMacAddress.
+     * <code>string lsp_symbolic_name = 1;</code>
+     * @return The bytes for lspSymbolicName.
      */
     com.google.protobuf.ByteString
-        getDstMacAddressBytes();
-
-    /**
-     * <code>uint32 ether_type = 3;</code>
-     * @return The etherType.
-     */
-    int getEtherType();
-
-    /**
-     * <code>uint32 vlan_id = 4;</code>
-     * @return The vlanId.
-     */
-    int getVlanId();
-
-    /**
-     * <code>uint32 mpls_label = 5;</code>
-     * @return The mplsLabel.
-     */
-    int getMplsLabel();
-
-    /**
-     * <code>uint32 mpls_traffic_class = 6;</code>
-     * @return The mplsTrafficClass.
-     */
-    int getMplsTrafficClass();
+        getLspSymbolicNameBytes();
   }
   /**
-   * Protobuf type {@code context.ConnectionSettings_L2}
+   * Protobuf type {@code context.ConnectionSettings_L0}
    */
-  public static final class ConnectionSettings_L2 extends
+  public static final class ConnectionSettings_L0 extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L2)
-      ConnectionSettings_L2OrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L0)
+      ConnectionSettings_L0OrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionSettings_L2.newBuilder() to construct.
-    private ConnectionSettings_L2(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings_L0.newBuilder() to construct.
+    private ConnectionSettings_L0(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionSettings_L2() {
-      srcMacAddress_ = "";
-      dstMacAddress_ = "";
+    private ConnectionSettings_L0() {
+      lspSymbolicName_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionSettings_L2();
+      return new ConnectionSettings_L0();
     }
 
     @java.lang.Override
@@ -37338,7 +37729,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionSettings_L2(
+    private ConnectionSettings_L0(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -37359,33 +37750,7 @@ public final class ContextOuterClass {
             case 10: {
               java.lang.String s = input.readStringRequireUtf8();
 
-              srcMacAddress_ = s;
-              break;
-            }
-            case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              dstMacAddress_ = s;
-              break;
-            }
-            case 24: {
-
-              etherType_ = input.readUInt32();
-              break;
-            }
-            case 32: {
-
-              vlanId_ = input.readUInt32();
-              break;
-            }
-            case 40: {
-
-              mplsLabel_ = input.readUInt32();
-              break;
-            }
-            case 48: {
-
-              mplsTrafficClass_ = input.readUInt32();
+              lspSymbolicName_ = s;
               break;
             }
             default: {
@@ -37409,199 +37774,83 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionSettings_L2.class, context.ContextOuterClass.ConnectionSettings_L2.Builder.class);
+              context.ContextOuterClass.ConnectionSettings_L0.class, context.ContextOuterClass.ConnectionSettings_L0.Builder.class);
     }
 
-    public static final int SRC_MAC_ADDRESS_FIELD_NUMBER = 1;
-    private volatile java.lang.Object srcMacAddress_;
+    public static final int LSP_SYMBOLIC_NAME_FIELD_NUMBER = 1;
+    private volatile java.lang.Object lspSymbolicName_;
     /**
-     * <code>string src_mac_address = 1;</code>
-     * @return The srcMacAddress.
+     * <code>string lsp_symbolic_name = 1;</code>
+     * @return The lspSymbolicName.
      */
     @java.lang.Override
-    public java.lang.String getSrcMacAddress() {
-      java.lang.Object ref = srcMacAddress_;
+    public java.lang.String getLspSymbolicName() {
+      java.lang.Object ref = lspSymbolicName_;
       if (ref instanceof java.lang.String) {
         return (java.lang.String) ref;
       } else {
         com.google.protobuf.ByteString bs = 
             (com.google.protobuf.ByteString) ref;
         java.lang.String s = bs.toStringUtf8();
-        srcMacAddress_ = s;
+        lspSymbolicName_ = s;
         return s;
       }
     }
     /**
-     * <code>string src_mac_address = 1;</code>
-     * @return The bytes for srcMacAddress.
+     * <code>string lsp_symbolic_name = 1;</code>
+     * @return The bytes for lspSymbolicName.
      */
     @java.lang.Override
     public com.google.protobuf.ByteString
-        getSrcMacAddressBytes() {
-      java.lang.Object ref = srcMacAddress_;
+        getLspSymbolicNameBytes() {
+      java.lang.Object ref = lspSymbolicName_;
       if (ref instanceof java.lang.String) {
         com.google.protobuf.ByteString b = 
             com.google.protobuf.ByteString.copyFromUtf8(
                 (java.lang.String) ref);
-        srcMacAddress_ = b;
+        lspSymbolicName_ = b;
         return b;
       } else {
         return (com.google.protobuf.ByteString) ref;
       }
     }
 
-    public static final int DST_MAC_ADDRESS_FIELD_NUMBER = 2;
-    private volatile java.lang.Object dstMacAddress_;
-    /**
-     * <code>string dst_mac_address = 2;</code>
-     * @return The dstMacAddress.
-     */
+    private byte memoizedIsInitialized = -1;
     @java.lang.Override
-    public java.lang.String getDstMacAddress() {
-      java.lang.Object ref = dstMacAddress_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        dstMacAddress_ = s;
-        return s;
-      }
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
     }
-    /**
-     * <code>string dst_mac_address = 2;</code>
-     * @return The bytes for dstMacAddress.
-     */
+
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getDstMacAddressBytes() {
-      java.lang.Object ref = dstMacAddress_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        dstMacAddress_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (!getLspSymbolicNameBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, lspSymbolicName_);
       }
+      unknownFields.writeTo(output);
     }
 
-    public static final int ETHER_TYPE_FIELD_NUMBER = 3;
-    private int etherType_;
-    /**
-     * <code>uint32 ether_type = 3;</code>
-     * @return The etherType.
-     */
     @java.lang.Override
-    public int getEtherType() {
-      return etherType_;
-    }
-
-    public static final int VLAN_ID_FIELD_NUMBER = 4;
-    private int vlanId_;
-    /**
-     * <code>uint32 vlan_id = 4;</code>
-     * @return The vlanId.
-     */
-    @java.lang.Override
-    public int getVlanId() {
-      return vlanId_;
-    }
-
-    public static final int MPLS_LABEL_FIELD_NUMBER = 5;
-    private int mplsLabel_;
-    /**
-     * <code>uint32 mpls_label = 5;</code>
-     * @return The mplsLabel.
-     */
-    @java.lang.Override
-    public int getMplsLabel() {
-      return mplsLabel_;
-    }
-
-    public static final int MPLS_TRAFFIC_CLASS_FIELD_NUMBER = 6;
-    private int mplsTrafficClass_;
-    /**
-     * <code>uint32 mpls_traffic_class = 6;</code>
-     * @return The mplsTrafficClass.
-     */
-    @java.lang.Override
-    public int getMplsTrafficClass() {
-      return mplsTrafficClass_;
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (!getSrcMacAddressBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, srcMacAddress_);
-      }
-      if (!getDstMacAddressBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, dstMacAddress_);
-      }
-      if (etherType_ != 0) {
-        output.writeUInt32(3, etherType_);
-      }
-      if (vlanId_ != 0) {
-        output.writeUInt32(4, vlanId_);
-      }
-      if (mplsLabel_ != 0) {
-        output.writeUInt32(5, mplsLabel_);
-      }
-      if (mplsTrafficClass_ != 0) {
-        output.writeUInt32(6, mplsTrafficClass_);
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
 
       size = 0;
-      if (!getSrcMacAddressBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, srcMacAddress_);
-      }
-      if (!getDstMacAddressBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, dstMacAddress_);
-      }
-      if (etherType_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(3, etherType_);
-      }
-      if (vlanId_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(4, vlanId_);
-      }
-      if (mplsLabel_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(5, mplsLabel_);
-      }
-      if (mplsTrafficClass_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(6, mplsTrafficClass_);
+      if (!getLspSymbolicNameBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, lspSymbolicName_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -37613,23 +37862,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L2)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L0)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionSettings_L2 other = (context.ContextOuterClass.ConnectionSettings_L2) obj;
+      context.ContextOuterClass.ConnectionSettings_L0 other = (context.ContextOuterClass.ConnectionSettings_L0) obj;
 
-      if (!getSrcMacAddress()
-          .equals(other.getSrcMacAddress())) return false;
-      if (!getDstMacAddress()
-          .equals(other.getDstMacAddress())) return false;
-      if (getEtherType()
-          != other.getEtherType()) return false;
-      if (getVlanId()
-          != other.getVlanId()) return false;
-      if (getMplsLabel()
-          != other.getMplsLabel()) return false;
-      if (getMplsTrafficClass()
-          != other.getMplsTrafficClass()) return false;
+      if (!getLspSymbolicName()
+          .equals(other.getLspSymbolicName())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -37641,86 +37880,76 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + SRC_MAC_ADDRESS_FIELD_NUMBER;
-      hash = (53 * hash) + getSrcMacAddress().hashCode();
-      hash = (37 * hash) + DST_MAC_ADDRESS_FIELD_NUMBER;
-      hash = (53 * hash) + getDstMacAddress().hashCode();
-      hash = (37 * hash) + ETHER_TYPE_FIELD_NUMBER;
-      hash = (53 * hash) + getEtherType();
-      hash = (37 * hash) + VLAN_ID_FIELD_NUMBER;
-      hash = (53 * hash) + getVlanId();
-      hash = (37 * hash) + MPLS_LABEL_FIELD_NUMBER;
-      hash = (53 * hash) + getMplsLabel();
-      hash = (37 * hash) + MPLS_TRAFFIC_CLASS_FIELD_NUMBER;
-      hash = (53 * hash) + getMplsTrafficClass();
+      hash = (37 * hash) + LSP_SYMBOLIC_NAME_FIELD_NUMBER;
+      hash = (53 * hash) + getLspSymbolicName().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -37733,7 +37962,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L2 prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L0 prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -37749,26 +37978,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionSettings_L2}
+     * Protobuf type {@code context.ConnectionSettings_L0}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L2)
-        context.ContextOuterClass.ConnectionSettings_L2OrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L0)
+        context.ContextOuterClass.ConnectionSettings_L0OrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionSettings_L2.class, context.ContextOuterClass.ConnectionSettings_L2.Builder.class);
+                context.ContextOuterClass.ConnectionSettings_L0.class, context.ContextOuterClass.ConnectionSettings_L0.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionSettings_L2.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings_L0.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -37786,17 +38015,7 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        srcMacAddress_ = "";
-
-        dstMacAddress_ = "";
-
-        etherType_ = 0;
-
-        vlanId_ = 0;
-
-        mplsLabel_ = 0;
-
-        mplsTrafficClass_ = 0;
+        lspSymbolicName_ = "";
 
         return this;
       }
@@ -37804,17 +38023,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L2 build() {
-        context.ContextOuterClass.ConnectionSettings_L2 result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings_L0 build() {
+        context.ContextOuterClass.ConnectionSettings_L0 result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -37822,14 +38041,9 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L2 buildPartial() {
-        context.ContextOuterClass.ConnectionSettings_L2 result = new context.ContextOuterClass.ConnectionSettings_L2(this);
-        result.srcMacAddress_ = srcMacAddress_;
-        result.dstMacAddress_ = dstMacAddress_;
-        result.etherType_ = etherType_;
-        result.vlanId_ = vlanId_;
-        result.mplsLabel_ = mplsLabel_;
-        result.mplsTrafficClass_ = mplsTrafficClass_;
+      public context.ContextOuterClass.ConnectionSettings_L0 buildPartial() {
+        context.ContextOuterClass.ConnectionSettings_L0 result = new context.ContextOuterClass.ConnectionSettings_L0(this);
+        result.lspSymbolicName_ = lspSymbolicName_;
         onBuilt();
         return result;
       }
@@ -37868,36 +38082,20 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionSettings_L2) {
-          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L2)other);
+        if (other instanceof context.ContextOuterClass.ConnectionSettings_L0) {
+          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L0)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L2 other) {
-        if (other == context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance()) return this;
-        if (!other.getSrcMacAddress().isEmpty()) {
-          srcMacAddress_ = other.srcMacAddress_;
-          onChanged();
-        }
-        if (!other.getDstMacAddress().isEmpty()) {
-          dstMacAddress_ = other.dstMacAddress_;
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L0 other) {
+        if (other == context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance()) return this;
+        if (!other.getLspSymbolicName().isEmpty()) {
+          lspSymbolicName_ = other.lspSymbolicName_;
           onChanged();
         }
-        if (other.getEtherType() != 0) {
-          setEtherType(other.getEtherType());
-        }
-        if (other.getVlanId() != 0) {
-          setVlanId(other.getVlanId());
-        }
-        if (other.getMplsLabel() != 0) {
-          setMplsLabel(other.getMplsLabel());
-        }
-        if (other.getMplsTrafficClass() != 0) {
-          setMplsTrafficClass(other.getMplsTrafficClass());
-        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -37913,11 +38111,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionSettings_L2 parsedMessage = null;
+        context.ContextOuterClass.ConnectionSettings_L0 parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L2) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L0) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -37927,278 +38125,78 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private java.lang.Object srcMacAddress_ = "";
+      private java.lang.Object lspSymbolicName_ = "";
       /**
-       * <code>string src_mac_address = 1;</code>
-       * @return The srcMacAddress.
+       * <code>string lsp_symbolic_name = 1;</code>
+       * @return The lspSymbolicName.
        */
-      public java.lang.String getSrcMacAddress() {
-        java.lang.Object ref = srcMacAddress_;
+      public java.lang.String getLspSymbolicName() {
+        java.lang.Object ref = lspSymbolicName_;
         if (!(ref instanceof java.lang.String)) {
           com.google.protobuf.ByteString bs =
               (com.google.protobuf.ByteString) ref;
           java.lang.String s = bs.toStringUtf8();
-          srcMacAddress_ = s;
+          lspSymbolicName_ = s;
           return s;
         } else {
           return (java.lang.String) ref;
         }
       }
       /**
-       * <code>string src_mac_address = 1;</code>
-       * @return The bytes for srcMacAddress.
+       * <code>string lsp_symbolic_name = 1;</code>
+       * @return The bytes for lspSymbolicName.
        */
       public com.google.protobuf.ByteString
-          getSrcMacAddressBytes() {
-        java.lang.Object ref = srcMacAddress_;
+          getLspSymbolicNameBytes() {
+        java.lang.Object ref = lspSymbolicName_;
         if (ref instanceof String) {
           com.google.protobuf.ByteString b = 
               com.google.protobuf.ByteString.copyFromUtf8(
                   (java.lang.String) ref);
-          srcMacAddress_ = b;
+          lspSymbolicName_ = b;
           return b;
         } else {
           return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>string src_mac_address = 1;</code>
-       * @param value The srcMacAddress to set.
+       * <code>string lsp_symbolic_name = 1;</code>
+       * @param value The lspSymbolicName to set.
        * @return This builder for chaining.
        */
-      public Builder setSrcMacAddress(
+      public Builder setLspSymbolicName(
           java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
   }
   
-        srcMacAddress_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string src_mac_address = 1;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearSrcMacAddress() {
-        
-        srcMacAddress_ = getDefaultInstance().getSrcMacAddress();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string src_mac_address = 1;</code>
-       * @param value The bytes for srcMacAddress to set.
-       * @return This builder for chaining.
-       */
-      public Builder setSrcMacAddressBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        srcMacAddress_ = value;
-        onChanged();
-        return this;
-      }
-
-      private java.lang.Object dstMacAddress_ = "";
-      /**
-       * <code>string dst_mac_address = 2;</code>
-       * @return The dstMacAddress.
-       */
-      public java.lang.String getDstMacAddress() {
-        java.lang.Object ref = dstMacAddress_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          dstMacAddress_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>string dst_mac_address = 2;</code>
-       * @return The bytes for dstMacAddress.
-       */
-      public com.google.protobuf.ByteString
-          getDstMacAddressBytes() {
-        java.lang.Object ref = dstMacAddress_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          dstMacAddress_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       * <code>string dst_mac_address = 2;</code>
-       * @param value The dstMacAddress to set.
-       * @return This builder for chaining.
-       */
-      public Builder setDstMacAddress(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        dstMacAddress_ = value;
+        lspSymbolicName_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>string dst_mac_address = 2;</code>
+       * <code>string lsp_symbolic_name = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder clearDstMacAddress() {
+      public Builder clearLspSymbolicName() {
         
-        dstMacAddress_ = getDefaultInstance().getDstMacAddress();
+        lspSymbolicName_ = getDefaultInstance().getLspSymbolicName();
         onChanged();
         return this;
       }
       /**
-       * <code>string dst_mac_address = 2;</code>
-       * @param value The bytes for dstMacAddress to set.
+       * <code>string lsp_symbolic_name = 1;</code>
+       * @param value The bytes for lspSymbolicName to set.
        * @return This builder for chaining.
        */
-      public Builder setDstMacAddressBytes(
+      public Builder setLspSymbolicNameBytes(
           com.google.protobuf.ByteString value) {
         if (value == null) {
     throw new NullPointerException();
   }
   checkByteStringIsUtf8(value);
         
-        dstMacAddress_ = value;
-        onChanged();
-        return this;
-      }
-
-      private int etherType_ ;
-      /**
-       * <code>uint32 ether_type = 3;</code>
-       * @return The etherType.
-       */
-      @java.lang.Override
-      public int getEtherType() {
-        return etherType_;
-      }
-      /**
-       * <code>uint32 ether_type = 3;</code>
-       * @param value The etherType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setEtherType(int value) {
-        
-        etherType_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>uint32 ether_type = 3;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearEtherType() {
-        
-        etherType_ = 0;
-        onChanged();
-        return this;
-      }
-
-      private int vlanId_ ;
-      /**
-       * <code>uint32 vlan_id = 4;</code>
-       * @return The vlanId.
-       */
-      @java.lang.Override
-      public int getVlanId() {
-        return vlanId_;
-      }
-      /**
-       * <code>uint32 vlan_id = 4;</code>
-       * @param value The vlanId to set.
-       * @return This builder for chaining.
-       */
-      public Builder setVlanId(int value) {
-        
-        vlanId_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>uint32 vlan_id = 4;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearVlanId() {
-        
-        vlanId_ = 0;
-        onChanged();
-        return this;
-      }
-
-      private int mplsLabel_ ;
-      /**
-       * <code>uint32 mpls_label = 5;</code>
-       * @return The mplsLabel.
-       */
-      @java.lang.Override
-      public int getMplsLabel() {
-        return mplsLabel_;
-      }
-      /**
-       * <code>uint32 mpls_label = 5;</code>
-       * @param value The mplsLabel to set.
-       * @return This builder for chaining.
-       */
-      public Builder setMplsLabel(int value) {
-        
-        mplsLabel_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>uint32 mpls_label = 5;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearMplsLabel() {
-        
-        mplsLabel_ = 0;
-        onChanged();
-        return this;
-      }
-
-      private int mplsTrafficClass_ ;
-      /**
-       * <code>uint32 mpls_traffic_class = 6;</code>
-       * @return The mplsTrafficClass.
-       */
-      @java.lang.Override
-      public int getMplsTrafficClass() {
-        return mplsTrafficClass_;
-      }
-      /**
-       * <code>uint32 mpls_traffic_class = 6;</code>
-       * @param value The mplsTrafficClass to set.
-       * @return This builder for chaining.
-       */
-      public Builder setMplsTrafficClass(int value) {
-        
-        mplsTrafficClass_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>uint32 mpls_traffic_class = 6;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearMplsTrafficClass() {
-        
-        mplsTrafficClass_ = 0;
+        lspSymbolicName_ = value;
         onChanged();
         return this;
       }
@@ -38215,114 +38213,120 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L2)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L0)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L2)
-    private static final context.ContextOuterClass.ConnectionSettings_L2 DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L0)
+    private static final context.ContextOuterClass.ConnectionSettings_L0 DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L2();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L0();
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionSettings_L2>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L2>() {
+    private static final com.google.protobuf.Parser<ConnectionSettings_L0>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L0>() {
       @java.lang.Override
-      public ConnectionSettings_L2 parsePartialFrom(
+      public ConnectionSettings_L0 parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionSettings_L2(input, extensionRegistry);
+        return new ConnectionSettings_L0(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionSettings_L2> parser() {
+    public static com.google.protobuf.Parser<ConnectionSettings_L0> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionSettings_L2> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionSettings_L0> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionSettings_L3OrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L3)
+  public interface ConnectionSettings_L2OrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L2)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>string src_ip_address = 1;</code>
-     * @return The srcIpAddress.
+     * <code>string src_mac_address = 1;</code>
+     * @return The srcMacAddress.
      */
-    java.lang.String getSrcIpAddress();
+    java.lang.String getSrcMacAddress();
     /**
-     * <code>string src_ip_address = 1;</code>
-     * @return The bytes for srcIpAddress.
+     * <code>string src_mac_address = 1;</code>
+     * @return The bytes for srcMacAddress.
      */
     com.google.protobuf.ByteString
-        getSrcIpAddressBytes();
+        getSrcMacAddressBytes();
 
     /**
-     * <code>string dst_ip_address = 2;</code>
-     * @return The dstIpAddress.
+     * <code>string dst_mac_address = 2;</code>
+     * @return The dstMacAddress.
      */
-    java.lang.String getDstIpAddress();
+    java.lang.String getDstMacAddress();
     /**
-     * <code>string dst_ip_address = 2;</code>
-     * @return The bytes for dstIpAddress.
+     * <code>string dst_mac_address = 2;</code>
+     * @return The bytes for dstMacAddress.
      */
     com.google.protobuf.ByteString
-        getDstIpAddressBytes();
+        getDstMacAddressBytes();
 
     /**
-     * <code>uint32 dscp = 3;</code>
-     * @return The dscp.
+     * <code>uint32 ether_type = 3;</code>
+     * @return The etherType.
      */
-    int getDscp();
+    int getEtherType();
 
     /**
-     * <code>uint32 protocol = 4;</code>
-     * @return The protocol.
+     * <code>uint32 vlan_id = 4;</code>
+     * @return The vlanId.
      */
-    int getProtocol();
+    int getVlanId();
 
     /**
-     * <code>uint32 ttl = 5;</code>
-     * @return The ttl.
+     * <code>uint32 mpls_label = 5;</code>
+     * @return The mplsLabel.
      */
-    int getTtl();
+    int getMplsLabel();
+
+    /**
+     * <code>uint32 mpls_traffic_class = 6;</code>
+     * @return The mplsTrafficClass.
+     */
+    int getMplsTrafficClass();
   }
   /**
-   * Protobuf type {@code context.ConnectionSettings_L3}
+   * Protobuf type {@code context.ConnectionSettings_L2}
    */
-  public static final class ConnectionSettings_L3 extends
+  public static final class ConnectionSettings_L2 extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L3)
-      ConnectionSettings_L3OrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L2)
+      ConnectionSettings_L2OrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionSettings_L3.newBuilder() to construct.
-    private ConnectionSettings_L3(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings_L2.newBuilder() to construct.
+    private ConnectionSettings_L2(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionSettings_L3() {
-      srcIpAddress_ = "";
-      dstIpAddress_ = "";
+    private ConnectionSettings_L2() {
+      srcMacAddress_ = "";
+      dstMacAddress_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionSettings_L3();
+      return new ConnectionSettings_L2();
     }
 
     @java.lang.Override
@@ -38330,7 +38334,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionSettings_L3(
+    private ConnectionSettings_L2(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -38351,28 +38355,33 @@ public final class ContextOuterClass {
             case 10: {
               java.lang.String s = input.readStringRequireUtf8();
 
-              srcIpAddress_ = s;
+              srcMacAddress_ = s;
               break;
             }
             case 18: {
               java.lang.String s = input.readStringRequireUtf8();
 
-              dstIpAddress_ = s;
+              dstMacAddress_ = s;
               break;
             }
             case 24: {
 
-              dscp_ = input.readUInt32();
+              etherType_ = input.readUInt32();
               break;
             }
             case 32: {
 
-              protocol_ = input.readUInt32();
+              vlanId_ = input.readUInt32();
               break;
             }
             case 40: {
 
-              ttl_ = input.readUInt32();
+              mplsLabel_ = input.readUInt32();
+              break;
+            }
+            case 48: {
+
+              mplsTrafficClass_ = input.readUInt32();
               break;
             }
             default: {
@@ -38396,124 +38405,135 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionSettings_L3.class, context.ContextOuterClass.ConnectionSettings_L3.Builder.class);
+              context.ContextOuterClass.ConnectionSettings_L2.class, context.ContextOuterClass.ConnectionSettings_L2.Builder.class);
     }
 
-    public static final int SRC_IP_ADDRESS_FIELD_NUMBER = 1;
-    private volatile java.lang.Object srcIpAddress_;
+    public static final int SRC_MAC_ADDRESS_FIELD_NUMBER = 1;
+    private volatile java.lang.Object srcMacAddress_;
     /**
-     * <code>string src_ip_address = 1;</code>
-     * @return The srcIpAddress.
+     * <code>string src_mac_address = 1;</code>
+     * @return The srcMacAddress.
      */
     @java.lang.Override
-    public java.lang.String getSrcIpAddress() {
-      java.lang.Object ref = srcIpAddress_;
+    public java.lang.String getSrcMacAddress() {
+      java.lang.Object ref = srcMacAddress_;
       if (ref instanceof java.lang.String) {
         return (java.lang.String) ref;
       } else {
         com.google.protobuf.ByteString bs = 
             (com.google.protobuf.ByteString) ref;
         java.lang.String s = bs.toStringUtf8();
-        srcIpAddress_ = s;
+        srcMacAddress_ = s;
         return s;
       }
     }
     /**
-     * <code>string src_ip_address = 1;</code>
-     * @return The bytes for srcIpAddress.
+     * <code>string src_mac_address = 1;</code>
+     * @return The bytes for srcMacAddress.
      */
     @java.lang.Override
     public com.google.protobuf.ByteString
-        getSrcIpAddressBytes() {
-      java.lang.Object ref = srcIpAddress_;
+        getSrcMacAddressBytes() {
+      java.lang.Object ref = srcMacAddress_;
       if (ref instanceof java.lang.String) {
         com.google.protobuf.ByteString b = 
             com.google.protobuf.ByteString.copyFromUtf8(
                 (java.lang.String) ref);
-        srcIpAddress_ = b;
+        srcMacAddress_ = b;
         return b;
       } else {
         return (com.google.protobuf.ByteString) ref;
       }
     }
 
-    public static final int DST_IP_ADDRESS_FIELD_NUMBER = 2;
-    private volatile java.lang.Object dstIpAddress_;
+    public static final int DST_MAC_ADDRESS_FIELD_NUMBER = 2;
+    private volatile java.lang.Object dstMacAddress_;
     /**
-     * <code>string dst_ip_address = 2;</code>
-     * @return The dstIpAddress.
+     * <code>string dst_mac_address = 2;</code>
+     * @return The dstMacAddress.
      */
     @java.lang.Override
-    public java.lang.String getDstIpAddress() {
-      java.lang.Object ref = dstIpAddress_;
+    public java.lang.String getDstMacAddress() {
+      java.lang.Object ref = dstMacAddress_;
       if (ref instanceof java.lang.String) {
         return (java.lang.String) ref;
       } else {
         com.google.protobuf.ByteString bs = 
             (com.google.protobuf.ByteString) ref;
         java.lang.String s = bs.toStringUtf8();
-        dstIpAddress_ = s;
+        dstMacAddress_ = s;
         return s;
       }
     }
     /**
-     * <code>string dst_ip_address = 2;</code>
-     * @return The bytes for dstIpAddress.
+     * <code>string dst_mac_address = 2;</code>
+     * @return The bytes for dstMacAddress.
      */
     @java.lang.Override
     public com.google.protobuf.ByteString
-        getDstIpAddressBytes() {
-      java.lang.Object ref = dstIpAddress_;
+        getDstMacAddressBytes() {
+      java.lang.Object ref = dstMacAddress_;
       if (ref instanceof java.lang.String) {
         com.google.protobuf.ByteString b = 
             com.google.protobuf.ByteString.copyFromUtf8(
                 (java.lang.String) ref);
-        dstIpAddress_ = b;
+        dstMacAddress_ = b;
         return b;
       } else {
         return (com.google.protobuf.ByteString) ref;
       }
     }
 
-    public static final int DSCP_FIELD_NUMBER = 3;
-    private int dscp_;
+    public static final int ETHER_TYPE_FIELD_NUMBER = 3;
+    private int etherType_;
     /**
-     * <code>uint32 dscp = 3;</code>
-     * @return The dscp.
+     * <code>uint32 ether_type = 3;</code>
+     * @return The etherType.
      */
     @java.lang.Override
-    public int getDscp() {
-      return dscp_;
+    public int getEtherType() {
+      return etherType_;
     }
 
-    public static final int PROTOCOL_FIELD_NUMBER = 4;
-    private int protocol_;
+    public static final int VLAN_ID_FIELD_NUMBER = 4;
+    private int vlanId_;
     /**
-     * <code>uint32 protocol = 4;</code>
-     * @return The protocol.
+     * <code>uint32 vlan_id = 4;</code>
+     * @return The vlanId.
      */
     @java.lang.Override
-    public int getProtocol() {
-      return protocol_;
+    public int getVlanId() {
+      return vlanId_;
     }
 
-    public static final int TTL_FIELD_NUMBER = 5;
-    private int ttl_;
+    public static final int MPLS_LABEL_FIELD_NUMBER = 5;
+    private int mplsLabel_;
     /**
-     * <code>uint32 ttl = 5;</code>
-     * @return The ttl.
+     * <code>uint32 mpls_label = 5;</code>
+     * @return The mplsLabel.
      */
     @java.lang.Override
-    public int getTtl() {
-      return ttl_;
+    public int getMplsLabel() {
+      return mplsLabel_;
+    }
+
+    public static final int MPLS_TRAFFIC_CLASS_FIELD_NUMBER = 6;
+    private int mplsTrafficClass_;
+    /**
+     * <code>uint32 mpls_traffic_class = 6;</code>
+     * @return The mplsTrafficClass.
+     */
+    @java.lang.Override
+    public int getMplsTrafficClass() {
+      return mplsTrafficClass_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -38530,20 +38550,23 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (!getSrcIpAddressBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, srcIpAddress_);
+      if (!getSrcMacAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, srcMacAddress_);
       }
-      if (!getDstIpAddressBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, dstIpAddress_);
+      if (!getDstMacAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, dstMacAddress_);
       }
-      if (dscp_ != 0) {
-        output.writeUInt32(3, dscp_);
+      if (etherType_ != 0) {
+        output.writeUInt32(3, etherType_);
       }
-      if (protocol_ != 0) {
-        output.writeUInt32(4, protocol_);
+      if (vlanId_ != 0) {
+        output.writeUInt32(4, vlanId_);
       }
-      if (ttl_ != 0) {
-        output.writeUInt32(5, ttl_);
+      if (mplsLabel_ != 0) {
+        output.writeUInt32(5, mplsLabel_);
+      }
+      if (mplsTrafficClass_ != 0) {
+        output.writeUInt32(6, mplsTrafficClass_);
       }
       unknownFields.writeTo(output);
     }
@@ -38554,23 +38577,27 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (!getSrcIpAddressBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, srcIpAddress_);
+      if (!getSrcMacAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, srcMacAddress_);
       }
-      if (!getDstIpAddressBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, dstIpAddress_);
+      if (!getDstMacAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, dstMacAddress_);
       }
-      if (dscp_ != 0) {
+      if (etherType_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(3, dscp_);
+          .computeUInt32Size(3, etherType_);
       }
-      if (protocol_ != 0) {
+      if (vlanId_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(4, protocol_);
+          .computeUInt32Size(4, vlanId_);
       }
-      if (ttl_ != 0) {
+      if (mplsLabel_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(5, ttl_);
+          .computeUInt32Size(5, mplsLabel_);
+      }
+      if (mplsTrafficClass_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(6, mplsTrafficClass_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -38582,21 +38609,23 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L3)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L2)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionSettings_L3 other = (context.ContextOuterClass.ConnectionSettings_L3) obj;
+      context.ContextOuterClass.ConnectionSettings_L2 other = (context.ContextOuterClass.ConnectionSettings_L2) obj;
 
-      if (!getSrcIpAddress()
-          .equals(other.getSrcIpAddress())) return false;
-      if (!getDstIpAddress()
-          .equals(other.getDstIpAddress())) return false;
-      if (getDscp()
-          != other.getDscp()) return false;
-      if (getProtocol()
-          != other.getProtocol()) return false;
-      if (getTtl()
-          != other.getTtl()) return false;
+      if (!getSrcMacAddress()
+          .equals(other.getSrcMacAddress())) return false;
+      if (!getDstMacAddress()
+          .equals(other.getDstMacAddress())) return false;
+      if (getEtherType()
+          != other.getEtherType()) return false;
+      if (getVlanId()
+          != other.getVlanId()) return false;
+      if (getMplsLabel()
+          != other.getMplsLabel()) return false;
+      if (getMplsTrafficClass()
+          != other.getMplsTrafficClass()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -38608,84 +38637,86 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + SRC_IP_ADDRESS_FIELD_NUMBER;
-      hash = (53 * hash) + getSrcIpAddress().hashCode();
-      hash = (37 * hash) + DST_IP_ADDRESS_FIELD_NUMBER;
-      hash = (53 * hash) + getDstIpAddress().hashCode();
-      hash = (37 * hash) + DSCP_FIELD_NUMBER;
-      hash = (53 * hash) + getDscp();
-      hash = (37 * hash) + PROTOCOL_FIELD_NUMBER;
-      hash = (53 * hash) + getProtocol();
-      hash = (37 * hash) + TTL_FIELD_NUMBER;
-      hash = (53 * hash) + getTtl();
+      hash = (37 * hash) + SRC_MAC_ADDRESS_FIELD_NUMBER;
+      hash = (53 * hash) + getSrcMacAddress().hashCode();
+      hash = (37 * hash) + DST_MAC_ADDRESS_FIELD_NUMBER;
+      hash = (53 * hash) + getDstMacAddress().hashCode();
+      hash = (37 * hash) + ETHER_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + getEtherType();
+      hash = (37 * hash) + VLAN_ID_FIELD_NUMBER;
+      hash = (53 * hash) + getVlanId();
+      hash = (37 * hash) + MPLS_LABEL_FIELD_NUMBER;
+      hash = (53 * hash) + getMplsLabel();
+      hash = (37 * hash) + MPLS_TRAFFIC_CLASS_FIELD_NUMBER;
+      hash = (53 * hash) + getMplsTrafficClass();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -38698,7 +38729,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L3 prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L2 prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -38714,26 +38745,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionSettings_L3}
+     * Protobuf type {@code context.ConnectionSettings_L2}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L3)
-        context.ContextOuterClass.ConnectionSettings_L3OrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L2)
+        context.ContextOuterClass.ConnectionSettings_L2OrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionSettings_L3.class, context.ContextOuterClass.ConnectionSettings_L3.Builder.class);
+                context.ContextOuterClass.ConnectionSettings_L2.class, context.ContextOuterClass.ConnectionSettings_L2.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionSettings_L3.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings_L2.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -38751,15 +38782,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        srcIpAddress_ = "";
+        srcMacAddress_ = "";
 
-        dstIpAddress_ = "";
+        dstMacAddress_ = "";
 
-        dscp_ = 0;
+        etherType_ = 0;
 
-        protocol_ = 0;
+        vlanId_ = 0;
 
-        ttl_ = 0;
+        mplsLabel_ = 0;
+
+        mplsTrafficClass_ = 0;
 
         return this;
       }
@@ -38767,17 +38800,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L3 build() {
-        context.ContextOuterClass.ConnectionSettings_L3 result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings_L2 build() {
+        context.ContextOuterClass.ConnectionSettings_L2 result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -38785,13 +38818,14 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L3 buildPartial() {
-        context.ContextOuterClass.ConnectionSettings_L3 result = new context.ContextOuterClass.ConnectionSettings_L3(this);
-        result.srcIpAddress_ = srcIpAddress_;
-        result.dstIpAddress_ = dstIpAddress_;
-        result.dscp_ = dscp_;
-        result.protocol_ = protocol_;
-        result.ttl_ = ttl_;
+      public context.ContextOuterClass.ConnectionSettings_L2 buildPartial() {
+        context.ContextOuterClass.ConnectionSettings_L2 result = new context.ContextOuterClass.ConnectionSettings_L2(this);
+        result.srcMacAddress_ = srcMacAddress_;
+        result.dstMacAddress_ = dstMacAddress_;
+        result.etherType_ = etherType_;
+        result.vlanId_ = vlanId_;
+        result.mplsLabel_ = mplsLabel_;
+        result.mplsTrafficClass_ = mplsTrafficClass_;
         onBuilt();
         return result;
       }
@@ -38830,32 +38864,35 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionSettings_L3) {
-          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L3)other);
+        if (other instanceof context.ContextOuterClass.ConnectionSettings_L2) {
+          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L2)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L3 other) {
-        if (other == context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance()) return this;
-        if (!other.getSrcIpAddress().isEmpty()) {
-          srcIpAddress_ = other.srcIpAddress_;
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L2 other) {
+        if (other == context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance()) return this;
+        if (!other.getSrcMacAddress().isEmpty()) {
+          srcMacAddress_ = other.srcMacAddress_;
           onChanged();
         }
-        if (!other.getDstIpAddress().isEmpty()) {
-          dstIpAddress_ = other.dstIpAddress_;
+        if (!other.getDstMacAddress().isEmpty()) {
+          dstMacAddress_ = other.dstMacAddress_;
           onChanged();
         }
-        if (other.getDscp() != 0) {
-          setDscp(other.getDscp());
+        if (other.getEtherType() != 0) {
+          setEtherType(other.getEtherType());
         }
-        if (other.getProtocol() != 0) {
-          setProtocol(other.getProtocol());
+        if (other.getVlanId() != 0) {
+          setVlanId(other.getVlanId());
         }
-        if (other.getTtl() != 0) {
-          setTtl(other.getTtl());
+        if (other.getMplsLabel() != 0) {
+          setMplsLabel(other.getMplsLabel());
+        }
+        if (other.getMplsTrafficClass() != 0) {
+          setMplsTrafficClass(other.getMplsTrafficClass());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -38872,11 +38909,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionSettings_L3 parsedMessage = null;
+        context.ContextOuterClass.ConnectionSettings_L2 parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L3) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L2) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -38886,247 +38923,278 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private java.lang.Object srcIpAddress_ = "";
+      private java.lang.Object srcMacAddress_ = "";
       /**
-       * <code>string src_ip_address = 1;</code>
-       * @return The srcIpAddress.
+       * <code>string src_mac_address = 1;</code>
+       * @return The srcMacAddress.
        */
-      public java.lang.String getSrcIpAddress() {
-        java.lang.Object ref = srcIpAddress_;
+      public java.lang.String getSrcMacAddress() {
+        java.lang.Object ref = srcMacAddress_;
         if (!(ref instanceof java.lang.String)) {
           com.google.protobuf.ByteString bs =
               (com.google.protobuf.ByteString) ref;
           java.lang.String s = bs.toStringUtf8();
-          srcIpAddress_ = s;
+          srcMacAddress_ = s;
           return s;
         } else {
           return (java.lang.String) ref;
         }
       }
       /**
-       * <code>string src_ip_address = 1;</code>
-       * @return The bytes for srcIpAddress.
+       * <code>string src_mac_address = 1;</code>
+       * @return The bytes for srcMacAddress.
        */
       public com.google.protobuf.ByteString
-          getSrcIpAddressBytes() {
-        java.lang.Object ref = srcIpAddress_;
+          getSrcMacAddressBytes() {
+        java.lang.Object ref = srcMacAddress_;
         if (ref instanceof String) {
           com.google.protobuf.ByteString b = 
               com.google.protobuf.ByteString.copyFromUtf8(
                   (java.lang.String) ref);
-          srcIpAddress_ = b;
+          srcMacAddress_ = b;
           return b;
         } else {
           return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>string src_ip_address = 1;</code>
-       * @param value The srcIpAddress to set.
+       * <code>string src_mac_address = 1;</code>
+       * @param value The srcMacAddress to set.
        * @return This builder for chaining.
        */
-      public Builder setSrcIpAddress(
+      public Builder setSrcMacAddress(
           java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
   }
   
-        srcIpAddress_ = value;
+        srcMacAddress_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>string src_ip_address = 1;</code>
+       * <code>string src_mac_address = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder clearSrcIpAddress() {
+      public Builder clearSrcMacAddress() {
         
-        srcIpAddress_ = getDefaultInstance().getSrcIpAddress();
+        srcMacAddress_ = getDefaultInstance().getSrcMacAddress();
         onChanged();
         return this;
       }
       /**
-       * <code>string src_ip_address = 1;</code>
-       * @param value The bytes for srcIpAddress to set.
+       * <code>string src_mac_address = 1;</code>
+       * @param value The bytes for srcMacAddress to set.
        * @return This builder for chaining.
        */
-      public Builder setSrcIpAddressBytes(
+      public Builder setSrcMacAddressBytes(
           com.google.protobuf.ByteString value) {
         if (value == null) {
     throw new NullPointerException();
   }
   checkByteStringIsUtf8(value);
         
-        srcIpAddress_ = value;
+        srcMacAddress_ = value;
         onChanged();
         return this;
       }
 
-      private java.lang.Object dstIpAddress_ = "";
+      private java.lang.Object dstMacAddress_ = "";
       /**
-       * <code>string dst_ip_address = 2;</code>
-       * @return The dstIpAddress.
+       * <code>string dst_mac_address = 2;</code>
+       * @return The dstMacAddress.
        */
-      public java.lang.String getDstIpAddress() {
-        java.lang.Object ref = dstIpAddress_;
+      public java.lang.String getDstMacAddress() {
+        java.lang.Object ref = dstMacAddress_;
         if (!(ref instanceof java.lang.String)) {
           com.google.protobuf.ByteString bs =
               (com.google.protobuf.ByteString) ref;
           java.lang.String s = bs.toStringUtf8();
-          dstIpAddress_ = s;
+          dstMacAddress_ = s;
           return s;
         } else {
           return (java.lang.String) ref;
         }
       }
       /**
-       * <code>string dst_ip_address = 2;</code>
-       * @return The bytes for dstIpAddress.
+       * <code>string dst_mac_address = 2;</code>
+       * @return The bytes for dstMacAddress.
        */
       public com.google.protobuf.ByteString
-          getDstIpAddressBytes() {
-        java.lang.Object ref = dstIpAddress_;
+          getDstMacAddressBytes() {
+        java.lang.Object ref = dstMacAddress_;
         if (ref instanceof String) {
           com.google.protobuf.ByteString b = 
               com.google.protobuf.ByteString.copyFromUtf8(
                   (java.lang.String) ref);
-          dstIpAddress_ = b;
+          dstMacAddress_ = b;
           return b;
         } else {
           return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>string dst_ip_address = 2;</code>
-       * @param value The dstIpAddress to set.
+       * <code>string dst_mac_address = 2;</code>
+       * @param value The dstMacAddress to set.
        * @return This builder for chaining.
        */
-      public Builder setDstIpAddress(
+      public Builder setDstMacAddress(
           java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
   }
   
-        dstIpAddress_ = value;
+        dstMacAddress_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>string dst_ip_address = 2;</code>
+       * <code>string dst_mac_address = 2;</code>
        * @return This builder for chaining.
        */
-      public Builder clearDstIpAddress() {
+      public Builder clearDstMacAddress() {
         
-        dstIpAddress_ = getDefaultInstance().getDstIpAddress();
+        dstMacAddress_ = getDefaultInstance().getDstMacAddress();
         onChanged();
         return this;
       }
       /**
-       * <code>string dst_ip_address = 2;</code>
-       * @param value The bytes for dstIpAddress to set.
+       * <code>string dst_mac_address = 2;</code>
+       * @param value The bytes for dstMacAddress to set.
        * @return This builder for chaining.
        */
-      public Builder setDstIpAddressBytes(
+      public Builder setDstMacAddressBytes(
           com.google.protobuf.ByteString value) {
         if (value == null) {
     throw new NullPointerException();
   }
   checkByteStringIsUtf8(value);
         
-        dstIpAddress_ = value;
+        dstMacAddress_ = value;
         onChanged();
         return this;
       }
 
-      private int dscp_ ;
+      private int etherType_ ;
       /**
-       * <code>uint32 dscp = 3;</code>
-       * @return The dscp.
+       * <code>uint32 ether_type = 3;</code>
+       * @return The etherType.
        */
       @java.lang.Override
-      public int getDscp() {
-        return dscp_;
+      public int getEtherType() {
+        return etherType_;
       }
       /**
-       * <code>uint32 dscp = 3;</code>
-       * @param value The dscp to set.
+       * <code>uint32 ether_type = 3;</code>
+       * @param value The etherType to set.
        * @return This builder for chaining.
        */
-      public Builder setDscp(int value) {
+      public Builder setEtherType(int value) {
         
-        dscp_ = value;
+        etherType_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>uint32 dscp = 3;</code>
+       * <code>uint32 ether_type = 3;</code>
        * @return This builder for chaining.
        */
-      public Builder clearDscp() {
+      public Builder clearEtherType() {
         
-        dscp_ = 0;
+        etherType_ = 0;
         onChanged();
         return this;
       }
 
-      private int protocol_ ;
+      private int vlanId_ ;
       /**
-       * <code>uint32 protocol = 4;</code>
-       * @return The protocol.
+       * <code>uint32 vlan_id = 4;</code>
+       * @return The vlanId.
        */
       @java.lang.Override
-      public int getProtocol() {
-        return protocol_;
+      public int getVlanId() {
+        return vlanId_;
       }
       /**
-       * <code>uint32 protocol = 4;</code>
-       * @param value The protocol to set.
+       * <code>uint32 vlan_id = 4;</code>
+       * @param value The vlanId to set.
        * @return This builder for chaining.
        */
-      public Builder setProtocol(int value) {
+      public Builder setVlanId(int value) {
         
-        protocol_ = value;
+        vlanId_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>uint32 protocol = 4;</code>
+       * <code>uint32 vlan_id = 4;</code>
        * @return This builder for chaining.
        */
-      public Builder clearProtocol() {
+      public Builder clearVlanId() {
         
-        protocol_ = 0;
+        vlanId_ = 0;
         onChanged();
         return this;
       }
 
-      private int ttl_ ;
+      private int mplsLabel_ ;
       /**
-       * <code>uint32 ttl = 5;</code>
-       * @return The ttl.
+       * <code>uint32 mpls_label = 5;</code>
+       * @return The mplsLabel.
        */
       @java.lang.Override
-      public int getTtl() {
-        return ttl_;
+      public int getMplsLabel() {
+        return mplsLabel_;
       }
       /**
-       * <code>uint32 ttl = 5;</code>
-       * @param value The ttl to set.
+       * <code>uint32 mpls_label = 5;</code>
+       * @param value The mplsLabel to set.
        * @return This builder for chaining.
        */
-      public Builder setTtl(int value) {
+      public Builder setMplsLabel(int value) {
         
-        ttl_ = value;
+        mplsLabel_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>uint32 ttl = 5;</code>
+       * <code>uint32 mpls_label = 5;</code>
        * @return This builder for chaining.
        */
-      public Builder clearTtl() {
+      public Builder clearMplsLabel() {
         
-        ttl_ = 0;
+        mplsLabel_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int mplsTrafficClass_ ;
+      /**
+       * <code>uint32 mpls_traffic_class = 6;</code>
+       * @return The mplsTrafficClass.
+       */
+      @java.lang.Override
+      public int getMplsTrafficClass() {
+        return mplsTrafficClass_;
+      }
+      /**
+       * <code>uint32 mpls_traffic_class = 6;</code>
+       * @param value The mplsTrafficClass to set.
+       * @return This builder for chaining.
+       */
+      public Builder setMplsTrafficClass(int value) {
+        
+        mplsTrafficClass_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 mpls_traffic_class = 6;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearMplsTrafficClass() {
+        
+        mplsTrafficClass_ = 0;
         onChanged();
         return this;
       }
@@ -39143,94 +39211,114 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L3)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L2)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L3)
-    private static final context.ContextOuterClass.ConnectionSettings_L3 DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L2)
+    private static final context.ContextOuterClass.ConnectionSettings_L2 DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L3();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L2();
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionSettings_L3>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L3>() {
+    private static final com.google.protobuf.Parser<ConnectionSettings_L2>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L2>() {
       @java.lang.Override
-      public ConnectionSettings_L3 parsePartialFrom(
+      public ConnectionSettings_L2 parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionSettings_L3(input, extensionRegistry);
+        return new ConnectionSettings_L2(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionSettings_L3> parser() {
+    public static com.google.protobuf.Parser<ConnectionSettings_L2> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionSettings_L3> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionSettings_L2> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionSettings_L4OrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L4)
+  public interface ConnectionSettings_L3OrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L3)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>uint32 src_port = 1;</code>
-     * @return The srcPort.
+     * <code>string src_ip_address = 1;</code>
+     * @return The srcIpAddress.
      */
-    int getSrcPort();
+    java.lang.String getSrcIpAddress();
+    /**
+     * <code>string src_ip_address = 1;</code>
+     * @return The bytes for srcIpAddress.
+     */
+    com.google.protobuf.ByteString
+        getSrcIpAddressBytes();
 
     /**
-     * <code>uint32 dst_port = 2;</code>
-     * @return The dstPort.
+     * <code>string dst_ip_address = 2;</code>
+     * @return The dstIpAddress.
      */
-    int getDstPort();
+    java.lang.String getDstIpAddress();
+    /**
+     * <code>string dst_ip_address = 2;</code>
+     * @return The bytes for dstIpAddress.
+     */
+    com.google.protobuf.ByteString
+        getDstIpAddressBytes();
 
     /**
-     * <code>uint32 tcp_flags = 3;</code>
-     * @return The tcpFlags.
+     * <code>uint32 dscp = 3;</code>
+     * @return The dscp.
      */
-    int getTcpFlags();
+    int getDscp();
 
     /**
-     * <code>uint32 ttl = 4;</code>
+     * <code>uint32 protocol = 4;</code>
+     * @return The protocol.
+     */
+    int getProtocol();
+
+    /**
+     * <code>uint32 ttl = 5;</code>
      * @return The ttl.
      */
     int getTtl();
   }
   /**
-   * Protobuf type {@code context.ConnectionSettings_L4}
+   * Protobuf type {@code context.ConnectionSettings_L3}
    */
-  public static final class ConnectionSettings_L4 extends
+  public static final class ConnectionSettings_L3 extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L4)
-      ConnectionSettings_L4OrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L3)
+      ConnectionSettings_L3OrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionSettings_L4.newBuilder() to construct.
-    private ConnectionSettings_L4(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings_L3.newBuilder() to construct.
+    private ConnectionSettings_L3(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionSettings_L4() {
+    private ConnectionSettings_L3() {
+      srcIpAddress_ = "";
+      dstIpAddress_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionSettings_L4();
+      return new ConnectionSettings_L3();
     }
 
     @java.lang.Override
@@ -39238,7 +39326,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionSettings_L4(
+    private ConnectionSettings_L3(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -39256,23 +39344,30 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 8: {
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
 
-              srcPort_ = input.readUInt32();
+              srcIpAddress_ = s;
               break;
             }
-            case 16: {
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
 
-              dstPort_ = input.readUInt32();
+              dstIpAddress_ = s;
               break;
             }
             case 24: {
 
-              tcpFlags_ = input.readUInt32();
+              dscp_ = input.readUInt32();
               break;
             }
             case 32: {
 
+              protocol_ = input.readUInt32();
+              break;
+            }
+            case 40: {
+
               ttl_ = input.readUInt32();
               break;
             }
@@ -39297,64 +39392,129 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionSettings_L4.class, context.ContextOuterClass.ConnectionSettings_L4.Builder.class);
+              context.ContextOuterClass.ConnectionSettings_L3.class, context.ContextOuterClass.ConnectionSettings_L3.Builder.class);
     }
 
-    public static final int SRC_PORT_FIELD_NUMBER = 1;
-    private int srcPort_;
+    public static final int SRC_IP_ADDRESS_FIELD_NUMBER = 1;
+    private volatile java.lang.Object srcIpAddress_;
     /**
-     * <code>uint32 src_port = 1;</code>
-     * @return The srcPort.
+     * <code>string src_ip_address = 1;</code>
+     * @return The srcIpAddress.
      */
     @java.lang.Override
-    public int getSrcPort() {
-      return srcPort_;
+    public java.lang.String getSrcIpAddress() {
+      java.lang.Object ref = srcIpAddress_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        srcIpAddress_ = s;
+        return s;
+      }
     }
-
-    public static final int DST_PORT_FIELD_NUMBER = 2;
-    private int dstPort_;
     /**
-     * <code>uint32 dst_port = 2;</code>
-     * @return The dstPort.
+     * <code>string src_ip_address = 1;</code>
+     * @return The bytes for srcIpAddress.
      */
     @java.lang.Override
-    public int getDstPort() {
-      return dstPort_;
+    public com.google.protobuf.ByteString
+        getSrcIpAddressBytes() {
+      java.lang.Object ref = srcIpAddress_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        srcIpAddress_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
-    public static final int TCP_FLAGS_FIELD_NUMBER = 3;
-    private int tcpFlags_;
+    public static final int DST_IP_ADDRESS_FIELD_NUMBER = 2;
+    private volatile java.lang.Object dstIpAddress_;
     /**
-     * <code>uint32 tcp_flags = 3;</code>
-     * @return The tcpFlags.
+     * <code>string dst_ip_address = 2;</code>
+     * @return The dstIpAddress.
      */
     @java.lang.Override
-    public int getTcpFlags() {
-      return tcpFlags_;
+    public java.lang.String getDstIpAddress() {
+      java.lang.Object ref = dstIpAddress_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        dstIpAddress_ = s;
+        return s;
+      }
     }
-
-    public static final int TTL_FIELD_NUMBER = 4;
-    private int ttl_;
     /**
-     * <code>uint32 ttl = 4;</code>
-     * @return The ttl.
+     * <code>string dst_ip_address = 2;</code>
+     * @return The bytes for dstIpAddress.
      */
     @java.lang.Override
-    public int getTtl() {
-      return ttl_;
+    public com.google.protobuf.ByteString
+        getDstIpAddressBytes() {
+      java.lang.Object ref = dstIpAddress_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        dstIpAddress_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
+    public static final int DSCP_FIELD_NUMBER = 3;
+    private int dscp_;
+    /**
+     * <code>uint32 dscp = 3;</code>
+     * @return The dscp.
+     */
+    @java.lang.Override
+    public int getDscp() {
+      return dscp_;
+    }
+
+    public static final int PROTOCOL_FIELD_NUMBER = 4;
+    private int protocol_;
+    /**
+     * <code>uint32 protocol = 4;</code>
+     * @return The protocol.
+     */
+    @java.lang.Override
+    public int getProtocol() {
+      return protocol_;
+    }
+
+    public static final int TTL_FIELD_NUMBER = 5;
+    private int ttl_;
+    /**
+     * <code>uint32 ttl = 5;</code>
+     * @return The ttl.
+     */
+    @java.lang.Override
+    public int getTtl() {
+      return ttl_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
       byte isInitialized = memoizedIsInitialized;
       if (isInitialized == 1) return true;
       if (isInitialized == 0) return false;
@@ -39366,17 +39526,20 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (srcPort_ != 0) {
-        output.writeUInt32(1, srcPort_);
+      if (!getSrcIpAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, srcIpAddress_);
       }
-      if (dstPort_ != 0) {
-        output.writeUInt32(2, dstPort_);
+      if (!getDstIpAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, dstIpAddress_);
       }
-      if (tcpFlags_ != 0) {
-        output.writeUInt32(3, tcpFlags_);
+      if (dscp_ != 0) {
+        output.writeUInt32(3, dscp_);
+      }
+      if (protocol_ != 0) {
+        output.writeUInt32(4, protocol_);
       }
       if (ttl_ != 0) {
-        output.writeUInt32(4, ttl_);
+        output.writeUInt32(5, ttl_);
       }
       unknownFields.writeTo(output);
     }
@@ -39387,21 +39550,23 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (srcPort_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(1, srcPort_);
+      if (!getSrcIpAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, srcIpAddress_);
       }
-      if (dstPort_ != 0) {
+      if (!getDstIpAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, dstIpAddress_);
+      }
+      if (dscp_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(2, dstPort_);
+          .computeUInt32Size(3, dscp_);
       }
-      if (tcpFlags_ != 0) {
+      if (protocol_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(3, tcpFlags_);
+          .computeUInt32Size(4, protocol_);
       }
       if (ttl_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(4, ttl_);
+          .computeUInt32Size(5, ttl_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -39413,17 +39578,19 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L4)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L3)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionSettings_L4 other = (context.ContextOuterClass.ConnectionSettings_L4) obj;
+      context.ContextOuterClass.ConnectionSettings_L3 other = (context.ContextOuterClass.ConnectionSettings_L3) obj;
 
-      if (getSrcPort()
-          != other.getSrcPort()) return false;
-      if (getDstPort()
-          != other.getDstPort()) return false;
-      if (getTcpFlags()
-          != other.getTcpFlags()) return false;
+      if (!getSrcIpAddress()
+          .equals(other.getSrcIpAddress())) return false;
+      if (!getDstIpAddress()
+          .equals(other.getDstIpAddress())) return false;
+      if (getDscp()
+          != other.getDscp()) return false;
+      if (getProtocol()
+          != other.getProtocol()) return false;
       if (getTtl()
           != other.getTtl()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
@@ -39437,12 +39604,14 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + SRC_PORT_FIELD_NUMBER;
-      hash = (53 * hash) + getSrcPort();
-      hash = (37 * hash) + DST_PORT_FIELD_NUMBER;
-      hash = (53 * hash) + getDstPort();
-      hash = (37 * hash) + TCP_FLAGS_FIELD_NUMBER;
-      hash = (53 * hash) + getTcpFlags();
+      hash = (37 * hash) + SRC_IP_ADDRESS_FIELD_NUMBER;
+      hash = (53 * hash) + getSrcIpAddress().hashCode();
+      hash = (37 * hash) + DST_IP_ADDRESS_FIELD_NUMBER;
+      hash = (53 * hash) + getDstIpAddress().hashCode();
+      hash = (37 * hash) + DSCP_FIELD_NUMBER;
+      hash = (53 * hash) + getDscp();
+      hash = (37 * hash) + PROTOCOL_FIELD_NUMBER;
+      hash = (53 * hash) + getProtocol();
       hash = (37 * hash) + TTL_FIELD_NUMBER;
       hash = (53 * hash) + getTtl();
       hash = (29 * hash) + unknownFields.hashCode();
@@ -39450,69 +39619,69 @@ public final class ContextOuterClass {
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -39525,7 +39694,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L4 prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L3 prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -39541,26 +39710,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionSettings_L4}
+     * Protobuf type {@code context.ConnectionSettings_L3}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L4)
-        context.ContextOuterClass.ConnectionSettings_L4OrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L3)
+        context.ContextOuterClass.ConnectionSettings_L3OrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionSettings_L4.class, context.ContextOuterClass.ConnectionSettings_L4.Builder.class);
+                context.ContextOuterClass.ConnectionSettings_L3.class, context.ContextOuterClass.ConnectionSettings_L3.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionSettings_L4.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings_L3.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -39578,11 +39747,13 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        srcPort_ = 0;
+        srcIpAddress_ = "";
 
-        dstPort_ = 0;
+        dstIpAddress_ = "";
 
-        tcpFlags_ = 0;
+        dscp_ = 0;
+
+        protocol_ = 0;
 
         ttl_ = 0;
 
@@ -39592,17 +39763,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L4 build() {
-        context.ContextOuterClass.ConnectionSettings_L4 result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings_L3 build() {
+        context.ContextOuterClass.ConnectionSettings_L3 result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -39610,11 +39781,12 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L4 buildPartial() {
-        context.ContextOuterClass.ConnectionSettings_L4 result = new context.ContextOuterClass.ConnectionSettings_L4(this);
-        result.srcPort_ = srcPort_;
-        result.dstPort_ = dstPort_;
-        result.tcpFlags_ = tcpFlags_;
+      public context.ContextOuterClass.ConnectionSettings_L3 buildPartial() {
+        context.ContextOuterClass.ConnectionSettings_L3 result = new context.ContextOuterClass.ConnectionSettings_L3(this);
+        result.srcIpAddress_ = srcIpAddress_;
+        result.dstIpAddress_ = dstIpAddress_;
+        result.dscp_ = dscp_;
+        result.protocol_ = protocol_;
         result.ttl_ = ttl_;
         onBuilt();
         return result;
@@ -39654,24 +39826,29 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionSettings_L4) {
-          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L4)other);
+        if (other instanceof context.ContextOuterClass.ConnectionSettings_L3) {
+          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L3)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L4 other) {
-        if (other == context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance()) return this;
-        if (other.getSrcPort() != 0) {
-          setSrcPort(other.getSrcPort());
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L3 other) {
+        if (other == context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance()) return this;
+        if (!other.getSrcIpAddress().isEmpty()) {
+          srcIpAddress_ = other.srcIpAddress_;
+          onChanged();
         }
-        if (other.getDstPort() != 0) {
-          setDstPort(other.getDstPort());
+        if (!other.getDstIpAddress().isEmpty()) {
+          dstIpAddress_ = other.dstIpAddress_;
+          onChanged();
         }
-        if (other.getTcpFlags() != 0) {
-          setTcpFlags(other.getTcpFlags());
+        if (other.getDscp() != 0) {
+          setDscp(other.getDscp());
+        }
+        if (other.getProtocol() != 0) {
+          setProtocol(other.getProtocol());
         }
         if (other.getTtl() != 0) {
           setTtl(other.getTtl());
@@ -39691,11 +39868,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionSettings_L4 parsedMessage = null;
+        context.ContextOuterClass.ConnectionSettings_L3 parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L4) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L3) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -39705,102 +39882,223 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private int srcPort_ ;
+      private java.lang.Object srcIpAddress_ = "";
       /**
-       * <code>uint32 src_port = 1;</code>
-       * @return The srcPort.
+       * <code>string src_ip_address = 1;</code>
+       * @return The srcIpAddress.
        */
-      @java.lang.Override
-      public int getSrcPort() {
-        return srcPort_;
+      public java.lang.String getSrcIpAddress() {
+        java.lang.Object ref = srcIpAddress_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          srcIpAddress_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
       }
       /**
-       * <code>uint32 src_port = 1;</code>
-       * @param value The srcPort to set.
+       * <code>string src_ip_address = 1;</code>
+       * @return The bytes for srcIpAddress.
+       */
+      public com.google.protobuf.ByteString
+          getSrcIpAddressBytes() {
+        java.lang.Object ref = srcIpAddress_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          srcIpAddress_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string src_ip_address = 1;</code>
+       * @param value The srcIpAddress to set.
        * @return This builder for chaining.
        */
-      public Builder setSrcPort(int value) {
-        
-        srcPort_ = value;
+      public Builder setSrcIpAddress(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        srcIpAddress_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>uint32 src_port = 1;</code>
+       * <code>string src_ip_address = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder clearSrcPort() {
+      public Builder clearSrcIpAddress() {
         
-        srcPort_ = 0;
+        srcIpAddress_ = getDefaultInstance().getSrcIpAddress();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string src_ip_address = 1;</code>
+       * @param value The bytes for srcIpAddress to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSrcIpAddressBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        srcIpAddress_ = value;
         onChanged();
         return this;
       }
 
-      private int dstPort_ ;
+      private java.lang.Object dstIpAddress_ = "";
       /**
-       * <code>uint32 dst_port = 2;</code>
-       * @return The dstPort.
+       * <code>string dst_ip_address = 2;</code>
+       * @return The dstIpAddress.
+       */
+      public java.lang.String getDstIpAddress() {
+        java.lang.Object ref = dstIpAddress_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          dstIpAddress_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string dst_ip_address = 2;</code>
+       * @return The bytes for dstIpAddress.
+       */
+      public com.google.protobuf.ByteString
+          getDstIpAddressBytes() {
+        java.lang.Object ref = dstIpAddress_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          dstIpAddress_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string dst_ip_address = 2;</code>
+       * @param value The dstIpAddress to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDstIpAddress(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        dstIpAddress_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string dst_ip_address = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDstIpAddress() {
+        
+        dstIpAddress_ = getDefaultInstance().getDstIpAddress();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string dst_ip_address = 2;</code>
+       * @param value The bytes for dstIpAddress to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDstIpAddressBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        dstIpAddress_ = value;
+        onChanged();
+        return this;
+      }
+
+      private int dscp_ ;
+      /**
+       * <code>uint32 dscp = 3;</code>
+       * @return The dscp.
        */
       @java.lang.Override
-      public int getDstPort() {
-        return dstPort_;
+      public int getDscp() {
+        return dscp_;
       }
       /**
-       * <code>uint32 dst_port = 2;</code>
-       * @param value The dstPort to set.
+       * <code>uint32 dscp = 3;</code>
+       * @param value The dscp to set.
        * @return This builder for chaining.
        */
-      public Builder setDstPort(int value) {
+      public Builder setDscp(int value) {
         
-        dstPort_ = value;
+        dscp_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>uint32 dst_port = 2;</code>
+       * <code>uint32 dscp = 3;</code>
        * @return This builder for chaining.
        */
-      public Builder clearDstPort() {
+      public Builder clearDscp() {
         
-        dstPort_ = 0;
+        dscp_ = 0;
         onChanged();
         return this;
       }
 
-      private int tcpFlags_ ;
+      private int protocol_ ;
       /**
-       * <code>uint32 tcp_flags = 3;</code>
-       * @return The tcpFlags.
+       * <code>uint32 protocol = 4;</code>
+       * @return The protocol.
        */
       @java.lang.Override
-      public int getTcpFlags() {
-        return tcpFlags_;
+      public int getProtocol() {
+        return protocol_;
       }
       /**
-       * <code>uint32 tcp_flags = 3;</code>
-       * @param value The tcpFlags to set.
+       * <code>uint32 protocol = 4;</code>
+       * @param value The protocol to set.
        * @return This builder for chaining.
        */
-      public Builder setTcpFlags(int value) {
+      public Builder setProtocol(int value) {
         
-        tcpFlags_ = value;
+        protocol_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>uint32 tcp_flags = 3;</code>
+       * <code>uint32 protocol = 4;</code>
        * @return This builder for chaining.
        */
-      public Builder clearTcpFlags() {
+      public Builder clearProtocol() {
         
-        tcpFlags_ = 0;
+        protocol_ = 0;
         onChanged();
         return this;
       }
 
       private int ttl_ ;
       /**
-       * <code>uint32 ttl = 4;</code>
+       * <code>uint32 ttl = 5;</code>
        * @return The ttl.
        */
       @java.lang.Override
@@ -39808,7 +40106,7 @@ public final class ContextOuterClass {
         return ttl_;
       }
       /**
-       * <code>uint32 ttl = 4;</code>
+       * <code>uint32 ttl = 5;</code>
        * @param value The ttl to set.
        * @return This builder for chaining.
        */
@@ -39819,7 +40117,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>uint32 ttl = 4;</code>
+       * <code>uint32 ttl = 5;</code>
        * @return This builder for chaining.
        */
       public Builder clearTtl() {
@@ -39841,130 +40139,94 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L4)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L3)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L4)
-    private static final context.ContextOuterClass.ConnectionSettings_L4 DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L3)
+    private static final context.ContextOuterClass.ConnectionSettings_L3 DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L4();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L3();
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionSettings_L4>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L4>() {
+    private static final com.google.protobuf.Parser<ConnectionSettings_L3>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L3>() {
       @java.lang.Override
-      public ConnectionSettings_L4 parsePartialFrom(
+      public ConnectionSettings_L3 parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionSettings_L4(input, extensionRegistry);
+        return new ConnectionSettings_L3(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionSettings_L4> parser() {
+    public static com.google.protobuf.Parser<ConnectionSettings_L3> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionSettings_L4> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionSettings_L3> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionSettingsOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings)
+  public interface ConnectionSettings_L4OrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L4)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-     * @return Whether the l0 field is set.
-     */
-    boolean hasL0();
-    /**
-     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-     * @return The l0.
-     */
-    context.ContextOuterClass.ConnectionSettings_L0 getL0();
-    /**
-     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * <code>uint32 src_port = 1;</code>
+     * @return The srcPort.
      */
-    context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder();
+    int getSrcPort();
 
     /**
-     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-     * @return Whether the l2 field is set.
-     */
-    boolean hasL2();
-    /**
-     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-     * @return The l2.
-     */
-    context.ContextOuterClass.ConnectionSettings_L2 getL2();
-    /**
-     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+     * <code>uint32 dst_port = 2;</code>
+     * @return The dstPort.
      */
-    context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder();
+    int getDstPort();
 
     /**
-     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-     * @return Whether the l3 field is set.
-     */
-    boolean hasL3();
-    /**
-     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-     * @return The l3.
-     */
-    context.ContextOuterClass.ConnectionSettings_L3 getL3();
-    /**
-     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     * <code>uint32 tcp_flags = 3;</code>
+     * @return The tcpFlags.
      */
-    context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder();
+    int getTcpFlags();
 
     /**
-     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-     * @return Whether the l4 field is set.
-     */
-    boolean hasL4();
-    /**
-     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-     * @return The l4.
-     */
-    context.ContextOuterClass.ConnectionSettings_L4 getL4();
-    /**
-     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     * <code>uint32 ttl = 4;</code>
+     * @return The ttl.
      */
-    context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder();
+    int getTtl();
   }
   /**
-   * Protobuf type {@code context.ConnectionSettings}
+   * Protobuf type {@code context.ConnectionSettings_L4}
    */
-  public static final class ConnectionSettings extends
+  public static final class ConnectionSettings_L4 extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionSettings)
-      ConnectionSettingsOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L4)
+      ConnectionSettings_L4OrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionSettings.newBuilder() to construct.
-    private ConnectionSettings(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings_L4.newBuilder() to construct.
+    private ConnectionSettings_L4(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionSettings() {
+    private ConnectionSettings_L4() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionSettings();
+      return new ConnectionSettings_L4();
     }
 
     @java.lang.Override
@@ -39972,7 +40234,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionSettings(
+    private ConnectionSettings_L4(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -39990,56 +40252,24 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 10: {
-              context.ContextOuterClass.ConnectionSettings_L0.Builder subBuilder = null;
-              if (l0_ != null) {
-                subBuilder = l0_.toBuilder();
-              }
-              l0_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L0.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(l0_);
-                l0_ = subBuilder.buildPartial();
-              }
+            case 8: {
 
+              srcPort_ = input.readUInt32();
               break;
             }
-            case 18: {
-              context.ContextOuterClass.ConnectionSettings_L2.Builder subBuilder = null;
-              if (l2_ != null) {
-                subBuilder = l2_.toBuilder();
-              }
-              l2_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L2.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(l2_);
-                l2_ = subBuilder.buildPartial();
-              }
+            case 16: {
 
+              dstPort_ = input.readUInt32();
               break;
             }
-            case 26: {
-              context.ContextOuterClass.ConnectionSettings_L3.Builder subBuilder = null;
-              if (l3_ != null) {
-                subBuilder = l3_.toBuilder();
-              }
-              l3_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L3.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(l3_);
-                l3_ = subBuilder.buildPartial();
-              }
+            case 24: {
 
+              tcpFlags_ = input.readUInt32();
               break;
             }
-            case 34: {
-              context.ContextOuterClass.ConnectionSettings_L4.Builder subBuilder = null;
-              if (l4_ != null) {
-                subBuilder = l4_.toBuilder();
-              }
-              l4_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L4.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(l4_);
-                l4_ = subBuilder.buildPartial();
-              }
+            case 32: {
 
+              ttl_ = input.readUInt32();
               break;
             }
             default: {
@@ -40063,119 +40293,59 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionSettings.class, context.ContextOuterClass.ConnectionSettings.Builder.class);
+              context.ContextOuterClass.ConnectionSettings_L4.class, context.ContextOuterClass.ConnectionSettings_L4.Builder.class);
     }
 
-    public static final int L0_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.ConnectionSettings_L0 l0_;
-    /**
-     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-     * @return Whether the l0 field is set.
-     */
-    @java.lang.Override
-    public boolean hasL0() {
-      return l0_ != null;
-    }
-    /**
-     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-     * @return The l0.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L0 getL0() {
-      return l0_ == null ? context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
-    }
+    public static final int SRC_PORT_FIELD_NUMBER = 1;
+    private int srcPort_;
     /**
-     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * <code>uint32 src_port = 1;</code>
+     * @return The srcPort.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder() {
-      return getL0();
+    public int getSrcPort() {
+      return srcPort_;
     }
 
-    public static final int L2_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.ConnectionSettings_L2 l2_;
-    /**
-     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-     * @return Whether the l2 field is set.
-     */
-    @java.lang.Override
-    public boolean hasL2() {
-      return l2_ != null;
-    }
-    /**
-     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-     * @return The l2.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L2 getL2() {
-      return l2_ == null ? context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
-    }
+    public static final int DST_PORT_FIELD_NUMBER = 2;
+    private int dstPort_;
     /**
-     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+     * <code>uint32 dst_port = 2;</code>
+     * @return The dstPort.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder() {
-      return getL2();
+    public int getDstPort() {
+      return dstPort_;
     }
 
-    public static final int L3_FIELD_NUMBER = 3;
-    private context.ContextOuterClass.ConnectionSettings_L3 l3_;
-    /**
-     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-     * @return Whether the l3 field is set.
-     */
-    @java.lang.Override
-    public boolean hasL3() {
-      return l3_ != null;
-    }
-    /**
-     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-     * @return The l3.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L3 getL3() {
-      return l3_ == null ? context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
-    }
+    public static final int TCP_FLAGS_FIELD_NUMBER = 3;
+    private int tcpFlags_;
     /**
-     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     * <code>uint32 tcp_flags = 3;</code>
+     * @return The tcpFlags.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder() {
-      return getL3();
+    public int getTcpFlags() {
+      return tcpFlags_;
     }
 
-    public static final int L4_FIELD_NUMBER = 4;
-    private context.ContextOuterClass.ConnectionSettings_L4 l4_;
-    /**
-     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-     * @return Whether the l4 field is set.
-     */
-    @java.lang.Override
-    public boolean hasL4() {
-      return l4_ != null;
-    }
-    /**
-     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-     * @return The l4.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L4 getL4() {
-      return l4_ == null ? context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
-    }
+    public static final int TTL_FIELD_NUMBER = 4;
+    private int ttl_;
     /**
-     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     * <code>uint32 ttl = 4;</code>
+     * @return The ttl.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder() {
-      return getL4();
+    public int getTtl() {
+      return ttl_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -40192,17 +40362,17 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (l0_ != null) {
-        output.writeMessage(1, getL0());
+      if (srcPort_ != 0) {
+        output.writeUInt32(1, srcPort_);
       }
-      if (l2_ != null) {
-        output.writeMessage(2, getL2());
+      if (dstPort_ != 0) {
+        output.writeUInt32(2, dstPort_);
       }
-      if (l3_ != null) {
-        output.writeMessage(3, getL3());
+      if (tcpFlags_ != 0) {
+        output.writeUInt32(3, tcpFlags_);
       }
-      if (l4_ != null) {
-        output.writeMessage(4, getL4());
+      if (ttl_ != 0) {
+        output.writeUInt32(4, ttl_);
       }
       unknownFields.writeTo(output);
     }
@@ -40213,21 +40383,21 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (l0_ != null) {
+      if (srcPort_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getL0());
+          .computeUInt32Size(1, srcPort_);
       }
-      if (l2_ != null) {
+      if (dstPort_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getL2());
+          .computeUInt32Size(2, dstPort_);
       }
-      if (l3_ != null) {
+      if (tcpFlags_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, getL3());
+          .computeUInt32Size(3, tcpFlags_);
       }
-      if (l4_ != null) {
+      if (ttl_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, getL4());
+          .computeUInt32Size(4, ttl_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -40239,31 +40409,19 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L4)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionSettings other = (context.ContextOuterClass.ConnectionSettings) obj;
+      context.ContextOuterClass.ConnectionSettings_L4 other = (context.ContextOuterClass.ConnectionSettings_L4) obj;
 
-      if (hasL0() != other.hasL0()) return false;
-      if (hasL0()) {
-        if (!getL0()
-            .equals(other.getL0())) return false;
-      }
-      if (hasL2() != other.hasL2()) return false;
-      if (hasL2()) {
-        if (!getL2()
-            .equals(other.getL2())) return false;
-      }
-      if (hasL3() != other.hasL3()) return false;
-      if (hasL3()) {
-        if (!getL3()
-            .equals(other.getL3())) return false;
-      }
-      if (hasL4() != other.hasL4()) return false;
-      if (hasL4()) {
-        if (!getL4()
-            .equals(other.getL4())) return false;
-      }
+      if (getSrcPort()
+          != other.getSrcPort()) return false;
+      if (getDstPort()
+          != other.getDstPort()) return false;
+      if (getTcpFlags()
+          != other.getTcpFlags()) return false;
+      if (getTtl()
+          != other.getTtl()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -40275,90 +40433,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasL0()) {
-        hash = (37 * hash) + L0_FIELD_NUMBER;
-        hash = (53 * hash) + getL0().hashCode();
-      }
-      if (hasL2()) {
-        hash = (37 * hash) + L2_FIELD_NUMBER;
-        hash = (53 * hash) + getL2().hashCode();
-      }
-      if (hasL3()) {
-        hash = (37 * hash) + L3_FIELD_NUMBER;
-        hash = (53 * hash) + getL3().hashCode();
-      }
-      if (hasL4()) {
-        hash = (37 * hash) + L4_FIELD_NUMBER;
-        hash = (53 * hash) + getL4().hashCode();
-      }
+      hash = (37 * hash) + SRC_PORT_FIELD_NUMBER;
+      hash = (53 * hash) + getSrcPort();
+      hash = (37 * hash) + DST_PORT_FIELD_NUMBER;
+      hash = (53 * hash) + getDstPort();
+      hash = (37 * hash) + TCP_FLAGS_FIELD_NUMBER;
+      hash = (53 * hash) + getTcpFlags();
+      hash = (37 * hash) + TTL_FIELD_NUMBER;
+      hash = (53 * hash) + getTtl();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -40371,7 +40521,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L4 prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -40387,26 +40537,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionSettings}
+     * Protobuf type {@code context.ConnectionSettings_L4}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings)
-        context.ContextOuterClass.ConnectionSettingsOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L4)
+        context.ContextOuterClass.ConnectionSettings_L4OrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionSettings.class, context.ContextOuterClass.ConnectionSettings.Builder.class);
+                context.ContextOuterClass.ConnectionSettings_L4.class, context.ContextOuterClass.ConnectionSettings_L4.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionSettings.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings_L4.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -40424,47 +40574,31 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (l0Builder_ == null) {
-          l0_ = null;
-        } else {
-          l0_ = null;
-          l0Builder_ = null;
-        }
-        if (l2Builder_ == null) {
-          l2_ = null;
-        } else {
-          l2_ = null;
-          l2Builder_ = null;
-        }
-        if (l3Builder_ == null) {
-          l3_ = null;
-        } else {
-          l3_ = null;
-          l3Builder_ = null;
-        }
-        if (l4Builder_ == null) {
-          l4_ = null;
-        } else {
-          l4_ = null;
-          l4Builder_ = null;
-        }
+        srcPort_ = 0;
+
+        dstPort_ = 0;
+
+        tcpFlags_ = 0;
+
+        ttl_ = 0;
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionSettings.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings build() {
-        context.ContextOuterClass.ConnectionSettings result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings_L4 build() {
+        context.ContextOuterClass.ConnectionSettings_L4 result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -40472,28 +40606,12 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings buildPartial() {
-        context.ContextOuterClass.ConnectionSettings result = new context.ContextOuterClass.ConnectionSettings(this);
-        if (l0Builder_ == null) {
-          result.l0_ = l0_;
-        } else {
-          result.l0_ = l0Builder_.build();
-        }
-        if (l2Builder_ == null) {
-          result.l2_ = l2_;
-        } else {
-          result.l2_ = l2Builder_.build();
-        }
-        if (l3Builder_ == null) {
-          result.l3_ = l3_;
-        } else {
-          result.l3_ = l3Builder_.build();
-        }
-        if (l4Builder_ == null) {
-          result.l4_ = l4_;
-        } else {
-          result.l4_ = l4Builder_.build();
-        }
+      public context.ContextOuterClass.ConnectionSettings_L4 buildPartial() {
+        context.ContextOuterClass.ConnectionSettings_L4 result = new context.ContextOuterClass.ConnectionSettings_L4(this);
+        result.srcPort_ = srcPort_;
+        result.dstPort_ = dstPort_;
+        result.tcpFlags_ = tcpFlags_;
+        result.ttl_ = ttl_;
         onBuilt();
         return result;
       }
@@ -40532,27 +40650,27 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionSettings) {
-          return mergeFrom((context.ContextOuterClass.ConnectionSettings)other);
+        if (other instanceof context.ContextOuterClass.ConnectionSettings_L4) {
+          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L4)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings other) {
-        if (other == context.ContextOuterClass.ConnectionSettings.getDefaultInstance()) return this;
-        if (other.hasL0()) {
-          mergeL0(other.getL0());
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L4 other) {
+        if (other == context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance()) return this;
+        if (other.getSrcPort() != 0) {
+          setSrcPort(other.getSrcPort());
         }
-        if (other.hasL2()) {
-          mergeL2(other.getL2());
+        if (other.getDstPort() != 0) {
+          setDstPort(other.getDstPort());
         }
-        if (other.hasL3()) {
-          mergeL3(other.getL3());
+        if (other.getTcpFlags() != 0) {
+          setTcpFlags(other.getTcpFlags());
         }
-        if (other.hasL4()) {
-          mergeL4(other.getL4());
+        if (other.getTtl() != 0) {
+          setTtl(other.getTtl());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -40569,11 +40687,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionSettings parsedMessage = null;
+        context.ContextOuterClass.ConnectionSettings_L4 parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionSettings) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L4) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -40583,653 +40701,266 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private context.ContextOuterClass.ConnectionSettings_L0 l0_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder> l0Builder_;
-      /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-       * @return Whether the l0 field is set.
-       */
-      public boolean hasL0() {
-        return l0Builder_ != null || l0_ != null;
-      }
+      private int srcPort_ ;
       /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-       * @return The l0.
+       * <code>uint32 src_port = 1;</code>
+       * @return The srcPort.
        */
-      public context.ContextOuterClass.ConnectionSettings_L0 getL0() {
-        if (l0Builder_ == null) {
-          return l0_ == null ? context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
-        } else {
-          return l0Builder_.getMessage();
-        }
+      @java.lang.Override
+      public int getSrcPort() {
+        return srcPort_;
       }
       /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * <code>uint32 src_port = 1;</code>
+       * @param value The srcPort to set.
+       * @return This builder for chaining.
        */
-      public Builder setL0(context.ContextOuterClass.ConnectionSettings_L0 value) {
-        if (l0Builder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          l0_ = value;
-          onChanged();
-        } else {
-          l0Builder_.setMessage(value);
-        }
-
+      public Builder setSrcPort(int value) {
+        
+        srcPort_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * <code>uint32 src_port = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder setL0(
-          context.ContextOuterClass.ConnectionSettings_L0.Builder builderForValue) {
-        if (l0Builder_ == null) {
-          l0_ = builderForValue.build();
-          onChanged();
-        } else {
-          l0Builder_.setMessage(builderForValue.build());
-        }
-
+      public Builder clearSrcPort() {
+        
+        srcPort_ = 0;
+        onChanged();
         return this;
       }
+
+      private int dstPort_ ;
       /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * <code>uint32 dst_port = 2;</code>
+       * @return The dstPort.
        */
-      public Builder mergeL0(context.ContextOuterClass.ConnectionSettings_L0 value) {
-        if (l0Builder_ == null) {
-          if (l0_ != null) {
-            l0_ =
-              context.ContextOuterClass.ConnectionSettings_L0.newBuilder(l0_).mergeFrom(value).buildPartial();
-          } else {
-            l0_ = value;
-          }
-          onChanged();
-        } else {
-          l0Builder_.mergeFrom(value);
-        }
-
-        return this;
+      @java.lang.Override
+      public int getDstPort() {
+        return dstPort_;
       }
       /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * <code>uint32 dst_port = 2;</code>
+       * @param value The dstPort to set.
+       * @return This builder for chaining.
        */
-      public Builder clearL0() {
-        if (l0Builder_ == null) {
-          l0_ = null;
-          onChanged();
-        } else {
-          l0_ = null;
-          l0Builder_ = null;
-        }
-
+      public Builder setDstPort(int value) {
+        
+        dstPort_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * <code>uint32 dst_port = 2;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ConnectionSettings_L0.Builder getL0Builder() {
+      public Builder clearDstPort() {
         
+        dstPort_ = 0;
         onChanged();
-        return getL0FieldBuilder().getBuilder();
+        return this;
       }
+
+      private int tcpFlags_ ;
       /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * <code>uint32 tcp_flags = 3;</code>
+       * @return The tcpFlags.
        */
-      public context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder() {
-        if (l0Builder_ != null) {
-          return l0Builder_.getMessageOrBuilder();
-        } else {
-          return l0_ == null ?
-              context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
-        }
+      @java.lang.Override
+      public int getTcpFlags() {
+        return tcpFlags_;
       }
       /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * <code>uint32 tcp_flags = 3;</code>
+       * @param value The tcpFlags to set.
+       * @return This builder for chaining.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder> 
-          getL0FieldBuilder() {
-        if (l0Builder_ == null) {
-          l0Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder>(
-                  getL0(),
-                  getParentForChildren(),
-                  isClean());
-          l0_ = null;
-        }
-        return l0Builder_;
-      }
-
-      private context.ContextOuterClass.ConnectionSettings_L2 l2_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L2, context.ContextOuterClass.ConnectionSettings_L2.Builder, context.ContextOuterClass.ConnectionSettings_L2OrBuilder> l2Builder_;
-      /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-       * @return Whether the l2 field is set.
-       */
-      public boolean hasL2() {
-        return l2Builder_ != null || l2_ != null;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-       * @return The l2.
-       */
-      public context.ContextOuterClass.ConnectionSettings_L2 getL2() {
-        if (l2Builder_ == null) {
-          return l2_ == null ? context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
-        } else {
-          return l2Builder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-       */
-      public Builder setL2(context.ContextOuterClass.ConnectionSettings_L2 value) {
-        if (l2Builder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          l2_ = value;
-          onChanged();
-        } else {
-          l2Builder_.setMessage(value);
-        }
-
+      public Builder setTcpFlags(int value) {
+        
+        tcpFlags_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       * <code>uint32 tcp_flags = 3;</code>
+       * @return This builder for chaining.
        */
-      public Builder setL2(
-          context.ContextOuterClass.ConnectionSettings_L2.Builder builderForValue) {
-        if (l2Builder_ == null) {
-          l2_ = builderForValue.build();
-          onChanged();
-        } else {
-          l2Builder_.setMessage(builderForValue.build());
-        }
-
+      public Builder clearTcpFlags() {
+        
+        tcpFlags_ = 0;
+        onChanged();
         return this;
       }
-      /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-       */
-      public Builder mergeL2(context.ContextOuterClass.ConnectionSettings_L2 value) {
-        if (l2Builder_ == null) {
-          if (l2_ != null) {
-            l2_ =
-              context.ContextOuterClass.ConnectionSettings_L2.newBuilder(l2_).mergeFrom(value).buildPartial();
-          } else {
-            l2_ = value;
-          }
-          onChanged();
-        } else {
-          l2Builder_.mergeFrom(value);
-        }
 
-        return this;
-      }
+      private int ttl_ ;
       /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       * <code>uint32 ttl = 4;</code>
+       * @return The ttl.
        */
-      public Builder clearL2() {
-        if (l2Builder_ == null) {
-          l2_ = null;
-          onChanged();
-        } else {
-          l2_ = null;
-          l2Builder_ = null;
-        }
-
-        return this;
+      @java.lang.Override
+      public int getTtl() {
+        return ttl_;
       }
       /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       * <code>uint32 ttl = 4;</code>
+       * @param value The ttl to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ConnectionSettings_L2.Builder getL2Builder() {
+      public Builder setTtl(int value) {
         
+        ttl_ = value;
         onChanged();
-        return getL2FieldBuilder().getBuilder();
+        return this;
       }
       /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       * <code>uint32 ttl = 4;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder() {
-        if (l2Builder_ != null) {
-          return l2Builder_.getMessageOrBuilder();
-        } else {
-          return l2_ == null ?
-              context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
-        }
+      public Builder clearTtl() {
+        
+        ttl_ = 0;
+        onChanged();
+        return this;
       }
-      /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L2, context.ContextOuterClass.ConnectionSettings_L2.Builder, context.ContextOuterClass.ConnectionSettings_L2OrBuilder> 
-          getL2FieldBuilder() {
-        if (l2Builder_ == null) {
-          l2Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionSettings_L2, context.ContextOuterClass.ConnectionSettings_L2.Builder, context.ContextOuterClass.ConnectionSettings_L2OrBuilder>(
-                  getL2(),
-                  getParentForChildren(),
-                  isClean());
-          l2_ = null;
-        }
-        return l2Builder_;
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
       }
 
-      private context.ContextOuterClass.ConnectionSettings_L3 l3_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder> l3Builder_;
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       * @return Whether the l3 field is set.
-       */
-      public boolean hasL3() {
-        return l3Builder_ != null || l3_ != null;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       * @return The l3.
-       */
-      public context.ContextOuterClass.ConnectionSettings_L3 getL3() {
-        if (l3Builder_ == null) {
-          return l3_ == null ? context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
-        } else {
-          return l3Builder_.getMessage();
-        }
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
       }
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       */
-      public Builder setL3(context.ContextOuterClass.ConnectionSettings_L3 value) {
-        if (l3Builder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          l3_ = value;
-          onChanged();
-        } else {
-          l3Builder_.setMessage(value);
-        }
 
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       */
-      public Builder setL3(
-          context.ContextOuterClass.ConnectionSettings_L3.Builder builderForValue) {
-        if (l3Builder_ == null) {
-          l3_ = builderForValue.build();
-          onChanged();
-        } else {
-          l3Builder_.setMessage(builderForValue.build());
-        }
 
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       */
-      public Builder mergeL3(context.ContextOuterClass.ConnectionSettings_L3 value) {
-        if (l3Builder_ == null) {
-          if (l3_ != null) {
-            l3_ =
-              context.ContextOuterClass.ConnectionSettings_L3.newBuilder(l3_).mergeFrom(value).buildPartial();
-          } else {
-            l3_ = value;
-          }
-          onChanged();
-        } else {
-          l3Builder_.mergeFrom(value);
-        }
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L4)
+    }
 
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       */
-      public Builder clearL3() {
-        if (l3Builder_ == null) {
-          l3_ = null;
-          onChanged();
-        } else {
-          l3_ = null;
-          l3Builder_ = null;
-        }
+    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L4)
+    private static final context.ContextOuterClass.ConnectionSettings_L4 DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L4();
+    }
 
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       */
-      public context.ContextOuterClass.ConnectionSettings_L3.Builder getL3Builder() {
-        
-        onChanged();
-        return getL3FieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       */
-      public context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder() {
-        if (l3Builder_ != null) {
-          return l3Builder_.getMessageOrBuilder();
-        } else {
-          return l3_ == null ?
-              context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
-        }
-      }
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder> 
-          getL3FieldBuilder() {
-        if (l3Builder_ == null) {
-          l3Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder>(
-                  getL3(),
-                  getParentForChildren(),
-                  isClean());
-          l3_ = null;
-        }
-        return l3Builder_;
-      }
-
-      private context.ContextOuterClass.ConnectionSettings_L4 l4_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder> l4Builder_;
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       * @return Whether the l4 field is set.
-       */
-      public boolean hasL4() {
-        return l4Builder_ != null || l4_ != null;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       * @return The l4.
-       */
-      public context.ContextOuterClass.ConnectionSettings_L4 getL4() {
-        if (l4Builder_ == null) {
-          return l4_ == null ? context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
-        } else {
-          return l4Builder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       */
-      public Builder setL4(context.ContextOuterClass.ConnectionSettings_L4 value) {
-        if (l4Builder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          l4_ = value;
-          onChanged();
-        } else {
-          l4Builder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       */
-      public Builder setL4(
-          context.ContextOuterClass.ConnectionSettings_L4.Builder builderForValue) {
-        if (l4Builder_ == null) {
-          l4_ = builderForValue.build();
-          onChanged();
-        } else {
-          l4Builder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       */
-      public Builder mergeL4(context.ContextOuterClass.ConnectionSettings_L4 value) {
-        if (l4Builder_ == null) {
-          if (l4_ != null) {
-            l4_ =
-              context.ContextOuterClass.ConnectionSettings_L4.newBuilder(l4_).mergeFrom(value).buildPartial();
-          } else {
-            l4_ = value;
-          }
-          onChanged();
-        } else {
-          l4Builder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       */
-      public Builder clearL4() {
-        if (l4Builder_ == null) {
-          l4_ = null;
-          onChanged();
-        } else {
-          l4_ = null;
-          l4Builder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       */
-      public context.ContextOuterClass.ConnectionSettings_L4.Builder getL4Builder() {
-        
-        onChanged();
-        return getL4FieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       */
-      public context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder() {
-        if (l4Builder_ != null) {
-          return l4Builder_.getMessageOrBuilder();
-        } else {
-          return l4_ == null ?
-              context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
-        }
-      }
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder> 
-          getL4FieldBuilder() {
-        if (l4Builder_ == null) {
-          l4Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder>(
-                  getL4(),
-                  getParentForChildren(),
-                  isClean());
-          l4_ = null;
-        }
-        return l4Builder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings)
-    }
-
-    // @@protoc_insertion_point(class_scope:context.ConnectionSettings)
-    private static final context.ContextOuterClass.ConnectionSettings DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings();
-    }
-
-    public static context.ContextOuterClass.ConnectionSettings getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<ConnectionSettings>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings>() {
-      @java.lang.Override
-      public ConnectionSettings parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionSettings(input, extensionRegistry);
+    public static context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ConnectionSettings_L4>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L4>() {
+      @java.lang.Override
+      public ConnectionSettings_L4 parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ConnectionSettings_L4(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionSettings> parser() {
+    public static com.google.protobuf.Parser<ConnectionSettings_L4> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionSettings> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionSettings_L4> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Connection)
+  public interface ConnectionSettingsOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
-     * @return Whether the connectionId field is set.
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * @return Whether the l0 field is set.
      */
-    boolean hasConnectionId();
+    boolean hasL0();
     /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
-     * @return The connectionId.
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * @return The l0.
      */
-    context.ContextOuterClass.ConnectionId getConnectionId();
+    context.ContextOuterClass.ConnectionSettings_L0 getL0();
     /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
      */
-    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
+    context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder();
 
     /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     * @return Whether the serviceId field is set.
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+     * @return Whether the l2 field is set.
      */
-    boolean hasServiceId();
+    boolean hasL2();
     /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     * @return The serviceId.
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+     * @return The l2.
      */
-    context.ContextOuterClass.ServiceId getServiceId();
+    context.ContextOuterClass.ConnectionSettings_L2 getL2();
     /**
-     * <code>.context.ServiceId service_id = 2;</code>
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
      */
-    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
+    context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder();
 
     /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-     */
-    java.util.List<context.ContextOuterClass.EndPointId> 
-        getPathHopsEndpointIdsList();
-    /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-     */
-    context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index);
-    /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     * @return Whether the l3 field is set.
      */
-    int getPathHopsEndpointIdsCount();
+    boolean hasL3();
     /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     * @return The l3.
      */
-    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getPathHopsEndpointIdsOrBuilderList();
+    context.ContextOuterClass.ConnectionSettings_L3 getL3();
     /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
      */
-    context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
-        int index);
+    context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder();
 
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     * @return Whether the l4 field is set.
      */
-    java.util.List<context.ContextOuterClass.ServiceId> 
-        getSubServiceIdsList();
+    boolean hasL4();
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     * @return The l4.
      */
-    context.ContextOuterClass.ServiceId getSubServiceIds(int index);
+    context.ContextOuterClass.ConnectionSettings_L4 getL4();
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-     */
-    int getSubServiceIdsCount();
-    /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getSubServiceIdsOrBuilderList();
-    /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-     */
-    context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
-        int index);
-
-    /**
-     * <code>.context.ConnectionSettings settings = 5;</code>
-     * @return Whether the settings field is set.
-     */
-    boolean hasSettings();
-    /**
-     * <code>.context.ConnectionSettings settings = 5;</code>
-     * @return The settings.
-     */
-    context.ContextOuterClass.ConnectionSettings getSettings();
-    /**
-     * <code>.context.ConnectionSettings settings = 5;</code>
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
      */
-    context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder();
+    context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder();
   }
   /**
-   * Protobuf type {@code context.Connection}
+   * Protobuf type {@code context.ConnectionSettings}
    */
-  public static final class Connection extends
+  public static final class ConnectionSettings extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Connection)
-      ConnectionOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings)
+      ConnectionSettingsOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Connection.newBuilder() to construct.
-    private Connection(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings.newBuilder() to construct.
+    private ConnectionSettings(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Connection() {
-      pathHopsEndpointIds_ = java.util.Collections.emptyList();
-      subServiceIds_ = java.util.Collections.emptyList();
+    private ConnectionSettings() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Connection();
+      return new ConnectionSettings();
     }
 
     @java.lang.Override
@@ -41237,7 +40968,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Connection(
+    private ConnectionSettings(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -41245,7 +40976,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -41257,58 +40987,53 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.ConnectionId.Builder subBuilder = null;
-              if (connectionId_ != null) {
-                subBuilder = connectionId_.toBuilder();
+              context.ContextOuterClass.ConnectionSettings_L0.Builder subBuilder = null;
+              if (l0_ != null) {
+                subBuilder = l0_.toBuilder();
               }
-              connectionId_ = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
+              l0_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L0.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(connectionId_);
-                connectionId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(l0_);
+                l0_ = subBuilder.buildPartial();
               }
 
               break;
             }
             case 18: {
-              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
-              if (serviceId_ != null) {
-                subBuilder = serviceId_.toBuilder();
+              context.ContextOuterClass.ConnectionSettings_L2.Builder subBuilder = null;
+              if (l2_ != null) {
+                subBuilder = l2_.toBuilder();
               }
-              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
+              l2_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L2.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(serviceId_);
-                serviceId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(l2_);
+                l2_ = subBuilder.buildPartial();
               }
 
               break;
             }
             case 26: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                pathHopsEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
-                mutable_bitField0_ |= 0x00000001;
+              context.ContextOuterClass.ConnectionSettings_L3.Builder subBuilder = null;
+              if (l3_ != null) {
+                subBuilder = l3_.toBuilder();
               }
-              pathHopsEndpointIds_.add(
-                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
-              break;
-            }
-            case 34: {
-              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                subServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
-                mutable_bitField0_ |= 0x00000002;
+              l3_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L3.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(l3_);
+                l3_ = subBuilder.buildPartial();
               }
-              subServiceIds_.add(
-                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
+
               break;
             }
-            case 42: {
-              context.ContextOuterClass.ConnectionSettings.Builder subBuilder = null;
-              if (settings_ != null) {
-                subBuilder = settings_.toBuilder();
+            case 34: {
+              context.ContextOuterClass.ConnectionSettings_L4.Builder subBuilder = null;
+              if (l4_ != null) {
+                subBuilder = l4_.toBuilder();
               }
-              settings_ = input.readMessage(context.ContextOuterClass.ConnectionSettings.parser(), extensionRegistry);
+              l4_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L4.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(settings_);
-                settings_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(l4_);
+                l4_ = subBuilder.buildPartial();
               }
 
               break;
@@ -41328,215 +41053,152 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          pathHopsEndpointIds_ = java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
-        }
-        if (((mutable_bitField0_ & 0x00000002) != 0)) {
-          subServiceIds_ = java.util.Collections.unmodifiableList(subServiceIds_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Connection_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Connection.class, context.ContextOuterClass.Connection.Builder.class);
+              context.ContextOuterClass.ConnectionSettings.class, context.ContextOuterClass.ConnectionSettings.Builder.class);
     }
 
-    public static final int CONNECTION_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.ConnectionId connectionId_;
+    public static final int L0_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ConnectionSettings_L0 l0_;
     /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
-     * @return Whether the connectionId field is set.
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * @return Whether the l0 field is set.
      */
     @java.lang.Override
-    public boolean hasConnectionId() {
-      return connectionId_ != null;
+    public boolean hasL0() {
+      return l0_ != null;
     }
     /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
-     * @return The connectionId.
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * @return The l0.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionId getConnectionId() {
-      return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+    public context.ContextOuterClass.ConnectionSettings_L0 getL0() {
+      return l0_ == null ? context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
     }
     /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
-      return getConnectionId();
+    public context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder() {
+      return getL0();
     }
 
-    public static final int SERVICE_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.ServiceId serviceId_;
+    public static final int L2_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ConnectionSettings_L2 l2_;
     /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     * @return Whether the serviceId field is set.
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+     * @return Whether the l2 field is set.
      */
     @java.lang.Override
-    public boolean hasServiceId() {
-      return serviceId_ != null;
+    public boolean hasL2() {
+      return l2_ != null;
     }
     /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     * @return The serviceId.
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+     * @return The l2.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceId getServiceId() {
-      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+    public context.ContextOuterClass.ConnectionSettings_L2 getL2() {
+      return l2_ == null ? context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
     }
     /**
-     * <code>.context.ServiceId service_id = 2;</code>
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-      return getServiceId();
+    public context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder() {
+      return getL2();
     }
 
-    public static final int PATH_HOPS_ENDPOINT_IDS_FIELD_NUMBER = 3;
-    private java.util.List<context.ContextOuterClass.EndPointId> pathHopsEndpointIds_;
-    /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.EndPointId> getPathHopsEndpointIdsList() {
-      return pathHopsEndpointIds_;
-    }
-    /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getPathHopsEndpointIdsOrBuilderList() {
-      return pathHopsEndpointIds_;
-    }
+    public static final int L3_FIELD_NUMBER = 3;
+    private context.ContextOuterClass.ConnectionSettings_L3 l3_;
     /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     * @return Whether the l3 field is set.
      */
     @java.lang.Override
-    public int getPathHopsEndpointIdsCount() {
-      return pathHopsEndpointIds_.size();
+    public boolean hasL3() {
+      return l3_ != null;
     }
     /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     * @return The l3.
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index) {
-      return pathHopsEndpointIds_.get(index);
+    public context.ContextOuterClass.ConnectionSettings_L3 getL3() {
+      return l3_ == null ? context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
     }
     /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
-        int index) {
-      return pathHopsEndpointIds_.get(index);
+    public context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder() {
+      return getL3();
     }
 
-    public static final int SUB_SERVICE_IDS_FIELD_NUMBER = 4;
-    private java.util.List<context.ContextOuterClass.ServiceId> subServiceIds_;
+    public static final int L4_FIELD_NUMBER = 4;
+    private context.ContextOuterClass.ConnectionSettings_L4 l4_;
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     * @return Whether the l4 field is set.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ServiceId> getSubServiceIdsList() {
-      return subServiceIds_;
+    public boolean hasL4() {
+      return l4_ != null;
     }
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     * @return The l4.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getSubServiceIdsOrBuilderList() {
-      return subServiceIds_;
+    public context.ContextOuterClass.ConnectionSettings_L4 getL4() {
+      return l4_ == null ? context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
     }
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
      */
     @java.lang.Override
-    public int getSubServiceIdsCount() {
-      return subServiceIds_.size();
+    public context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder() {
+      return getL4();
     }
-    /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-     */
+
+    private byte memoizedIsInitialized = -1;
     @java.lang.Override
-    public context.ContextOuterClass.ServiceId getSubServiceIds(int index) {
-      return subServiceIds_.get(index);
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
     }
-    /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
-        int index) {
-      return subServiceIds_.get(index);
-    }
-
-    public static final int SETTINGS_FIELD_NUMBER = 5;
-    private context.ContextOuterClass.ConnectionSettings settings_;
-    /**
-     * <code>.context.ConnectionSettings settings = 5;</code>
-     * @return Whether the settings field is set.
-     */
-    @java.lang.Override
-    public boolean hasSettings() {
-      return settings_ != null;
-    }
-    /**
-     * <code>.context.ConnectionSettings settings = 5;</code>
-     * @return The settings.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings getSettings() {
-      return settings_ == null ? context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
-    }
-    /**
-     * <code>.context.ConnectionSettings settings = 5;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder() {
-      return getSettings();
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
+
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (connectionId_ != null) {
-        output.writeMessage(1, getConnectionId());
-      }
-      if (serviceId_ != null) {
-        output.writeMessage(2, getServiceId());
+      if (l0_ != null) {
+        output.writeMessage(1, getL0());
       }
-      for (int i = 0; i < pathHopsEndpointIds_.size(); i++) {
-        output.writeMessage(3, pathHopsEndpointIds_.get(i));
+      if (l2_ != null) {
+        output.writeMessage(2, getL2());
       }
-      for (int i = 0; i < subServiceIds_.size(); i++) {
-        output.writeMessage(4, subServiceIds_.get(i));
+      if (l3_ != null) {
+        output.writeMessage(3, getL3());
       }
-      if (settings_ != null) {
-        output.writeMessage(5, getSettings());
+      if (l4_ != null) {
+        output.writeMessage(4, getL4());
       }
       unknownFields.writeTo(output);
     }
@@ -41547,25 +41209,21 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (connectionId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getConnectionId());
-      }
-      if (serviceId_ != null) {
+      if (l0_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getServiceId());
+          .computeMessageSize(1, getL0());
       }
-      for (int i = 0; i < pathHopsEndpointIds_.size(); i++) {
+      if (l2_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, pathHopsEndpointIds_.get(i));
+          .computeMessageSize(2, getL2());
       }
-      for (int i = 0; i < subServiceIds_.size(); i++) {
+      if (l3_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, subServiceIds_.get(i));
+          .computeMessageSize(3, getL3());
       }
-      if (settings_ != null) {
+      if (l4_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, getSettings());
+          .computeMessageSize(4, getL4());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -41577,29 +41235,30 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Connection)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Connection other = (context.ContextOuterClass.Connection) obj;
+      context.ContextOuterClass.ConnectionSettings other = (context.ContextOuterClass.ConnectionSettings) obj;
 
-      if (hasConnectionId() != other.hasConnectionId()) return false;
-      if (hasConnectionId()) {
-        if (!getConnectionId()
-            .equals(other.getConnectionId())) return false;
+      if (hasL0() != other.hasL0()) return false;
+      if (hasL0()) {
+        if (!getL0()
+            .equals(other.getL0())) return false;
       }
-      if (hasServiceId() != other.hasServiceId()) return false;
-      if (hasServiceId()) {
-        if (!getServiceId()
-            .equals(other.getServiceId())) return false;
+      if (hasL2() != other.hasL2()) return false;
+      if (hasL2()) {
+        if (!getL2()
+            .equals(other.getL2())) return false;
       }
-      if (!getPathHopsEndpointIdsList()
-          .equals(other.getPathHopsEndpointIdsList())) return false;
-      if (!getSubServiceIdsList()
-          .equals(other.getSubServiceIdsList())) return false;
-      if (hasSettings() != other.hasSettings()) return false;
-      if (hasSettings()) {
-        if (!getSettings()
-            .equals(other.getSettings())) return false;
+      if (hasL3() != other.hasL3()) return false;
+      if (hasL3()) {
+        if (!getL3()
+            .equals(other.getL3())) return false;
+      }
+      if (hasL4() != other.hasL4()) return false;
+      if (hasL4()) {
+        if (!getL4()
+            .equals(other.getL4())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -41612,94 +41271,90 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasConnectionId()) {
-        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionId().hashCode();
-      }
-      if (hasServiceId()) {
-        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceId().hashCode();
+      if (hasL0()) {
+        hash = (37 * hash) + L0_FIELD_NUMBER;
+        hash = (53 * hash) + getL0().hashCode();
       }
-      if (getPathHopsEndpointIdsCount() > 0) {
-        hash = (37 * hash) + PATH_HOPS_ENDPOINT_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getPathHopsEndpointIdsList().hashCode();
+      if (hasL2()) {
+        hash = (37 * hash) + L2_FIELD_NUMBER;
+        hash = (53 * hash) + getL2().hashCode();
       }
-      if (getSubServiceIdsCount() > 0) {
-        hash = (37 * hash) + SUB_SERVICE_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getSubServiceIdsList().hashCode();
+      if (hasL3()) {
+        hash = (37 * hash) + L3_FIELD_NUMBER;
+        hash = (53 * hash) + getL3().hashCode();
       }
-      if (hasSettings()) {
-        hash = (37 * hash) + SETTINGS_FIELD_NUMBER;
-        hash = (53 * hash) + getSettings().hashCode();
+      if (hasL4()) {
+        hash = (37 * hash) + L4_FIELD_NUMBER;
+        hash = (53 * hash) + getL4().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Connection parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -41712,7 +41367,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Connection prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -41728,26 +41383,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Connection}
+     * Protobuf type {@code context.ConnectionSettings}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Connection)
-        context.ContextOuterClass.ConnectionOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings)
+        context.ContextOuterClass.ConnectionSettingsOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Connection_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Connection.class, context.ContextOuterClass.Connection.Builder.class);
+                context.ContextOuterClass.ConnectionSettings.class, context.ContextOuterClass.ConnectionSettings.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Connection.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -41760,42 +41415,34 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getPathHopsEndpointIdsFieldBuilder();
-          getSubServiceIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = null;
-        } else {
-          connectionId_ = null;
-          connectionIdBuilder_ = null;
-        }
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
+        if (l0Builder_ == null) {
+          l0_ = null;
         } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
+          l0_ = null;
+          l0Builder_ = null;
         }
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          pathHopsEndpointIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (l2Builder_ == null) {
+          l2_ = null;
         } else {
-          pathHopsEndpointIdsBuilder_.clear();
+          l2_ = null;
+          l2Builder_ = null;
         }
-        if (subServiceIdsBuilder_ == null) {
-          subServiceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
+        if (l3Builder_ == null) {
+          l3_ = null;
         } else {
-          subServiceIdsBuilder_.clear();
+          l3_ = null;
+          l3Builder_ = null;
         }
-        if (settingsBuilder_ == null) {
-          settings_ = null;
+        if (l4Builder_ == null) {
+          l4_ = null;
         } else {
-          settings_ = null;
-          settingsBuilder_ = null;
+          l4_ = null;
+          l4Builder_ = null;
         }
         return this;
       }
@@ -41803,17 +41450,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Connection getDefaultInstanceForType() {
-        return context.ContextOuterClass.Connection.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Connection build() {
-        context.ContextOuterClass.Connection result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings build() {
+        context.ContextOuterClass.ConnectionSettings result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -41821,41 +41468,27 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Connection buildPartial() {
-        context.ContextOuterClass.Connection result = new context.ContextOuterClass.Connection(this);
-        int from_bitField0_ = bitField0_;
-        if (connectionIdBuilder_ == null) {
-          result.connectionId_ = connectionId_;
+      public context.ContextOuterClass.ConnectionSettings buildPartial() {
+        context.ContextOuterClass.ConnectionSettings result = new context.ContextOuterClass.ConnectionSettings(this);
+        if (l0Builder_ == null) {
+          result.l0_ = l0_;
         } else {
-          result.connectionId_ = connectionIdBuilder_.build();
+          result.l0_ = l0Builder_.build();
         }
-        if (serviceIdBuilder_ == null) {
-          result.serviceId_ = serviceId_;
+        if (l2Builder_ == null) {
+          result.l2_ = l2_;
         } else {
-          result.serviceId_ = serviceIdBuilder_.build();
+          result.l2_ = l2Builder_.build();
         }
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            pathHopsEndpointIds_ = java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.pathHopsEndpointIds_ = pathHopsEndpointIds_;
-        } else {
-          result.pathHopsEndpointIds_ = pathHopsEndpointIdsBuilder_.build();
-        }
-        if (subServiceIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000002) != 0)) {
-            subServiceIds_ = java.util.Collections.unmodifiableList(subServiceIds_);
-            bitField0_ = (bitField0_ & ~0x00000002);
-          }
-          result.subServiceIds_ = subServiceIds_;
+        if (l3Builder_ == null) {
+          result.l3_ = l3_;
         } else {
-          result.subServiceIds_ = subServiceIdsBuilder_.build();
+          result.l3_ = l3Builder_.build();
         }
-        if (settingsBuilder_ == null) {
-          result.settings_ = settings_;
+        if (l4Builder_ == null) {
+          result.l4_ = l4_;
         } else {
-          result.settings_ = settingsBuilder_.build();
+          result.l4_ = l4Builder_.build();
         }
         onBuilt();
         return result;
@@ -41895,76 +41528,27 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Connection) {
-          return mergeFrom((context.ContextOuterClass.Connection)other);
+        if (other instanceof context.ContextOuterClass.ConnectionSettings) {
+          return mergeFrom((context.ContextOuterClass.ConnectionSettings)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Connection other) {
-        if (other == context.ContextOuterClass.Connection.getDefaultInstance()) return this;
-        if (other.hasConnectionId()) {
-          mergeConnectionId(other.getConnectionId());
-        }
-        if (other.hasServiceId()) {
-          mergeServiceId(other.getServiceId());
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings other) {
+        if (other == context.ContextOuterClass.ConnectionSettings.getDefaultInstance()) return this;
+        if (other.hasL0()) {
+          mergeL0(other.getL0());
         }
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          if (!other.pathHopsEndpointIds_.isEmpty()) {
-            if (pathHopsEndpointIds_.isEmpty()) {
-              pathHopsEndpointIds_ = other.pathHopsEndpointIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensurePathHopsEndpointIdsIsMutable();
-              pathHopsEndpointIds_.addAll(other.pathHopsEndpointIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.pathHopsEndpointIds_.isEmpty()) {
-            if (pathHopsEndpointIdsBuilder_.isEmpty()) {
-              pathHopsEndpointIdsBuilder_.dispose();
-              pathHopsEndpointIdsBuilder_ = null;
-              pathHopsEndpointIds_ = other.pathHopsEndpointIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              pathHopsEndpointIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getPathHopsEndpointIdsFieldBuilder() : null;
-            } else {
-              pathHopsEndpointIdsBuilder_.addAllMessages(other.pathHopsEndpointIds_);
-            }
-          }
+        if (other.hasL2()) {
+          mergeL2(other.getL2());
         }
-        if (subServiceIdsBuilder_ == null) {
-          if (!other.subServiceIds_.isEmpty()) {
-            if (subServiceIds_.isEmpty()) {
-              subServiceIds_ = other.subServiceIds_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-            } else {
-              ensureSubServiceIdsIsMutable();
-              subServiceIds_.addAll(other.subServiceIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.subServiceIds_.isEmpty()) {
-            if (subServiceIdsBuilder_.isEmpty()) {
-              subServiceIdsBuilder_.dispose();
-              subServiceIdsBuilder_ = null;
-              subServiceIds_ = other.subServiceIds_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-              subServiceIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSubServiceIdsFieldBuilder() : null;
-            } else {
-              subServiceIdsBuilder_.addAllMessages(other.subServiceIds_);
-            }
-          }
+        if (other.hasL3()) {
+          mergeL3(other.getL3());
         }
-        if (other.hasSettings()) {
-          mergeSettings(other.getSettings());
+        if (other.hasL4()) {
+          mergeL4(other.getL4());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -41981,11 +41565,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Connection parsedMessage = null;
+        context.ContextOuterClass.ConnectionSettings parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Connection) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -41994,843 +41578,3048 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
 
-      private context.ContextOuterClass.ConnectionId connectionId_;
+      private context.ContextOuterClass.ConnectionSettings_L0 l0_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdBuilder_;
+          context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder> l0Builder_;
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       * @return Whether the connectionId field is set.
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * @return Whether the l0 field is set.
        */
-      public boolean hasConnectionId() {
-        return connectionIdBuilder_ != null || connectionId_ != null;
+      public boolean hasL0() {
+        return l0Builder_ != null || l0_ != null;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       * @return The connectionId.
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * @return The l0.
        */
-      public context.ContextOuterClass.ConnectionId getConnectionId() {
-        if (connectionIdBuilder_ == null) {
-          return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+      public context.ContextOuterClass.ConnectionSettings_L0 getL0() {
+        if (l0Builder_ == null) {
+          return l0_ == null ? context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
         } else {
-          return connectionIdBuilder_.getMessage();
+          return l0Builder_.getMessage();
         }
       }
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
        */
-      public Builder setConnectionId(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdBuilder_ == null) {
+      public Builder setL0(context.ContextOuterClass.ConnectionSettings_L0 value) {
+        if (l0Builder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          connectionId_ = value;
+          l0_ = value;
           onChanged();
         } else {
-          connectionIdBuilder_.setMessage(value);
+          l0Builder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
        */
-      public Builder setConnectionId(
-          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = builderForValue.build();
+      public Builder setL0(
+          context.ContextOuterClass.ConnectionSettings_L0.Builder builderForValue) {
+        if (l0Builder_ == null) {
+          l0_ = builderForValue.build();
           onChanged();
         } else {
-          connectionIdBuilder_.setMessage(builderForValue.build());
+          l0Builder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
        */
-      public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdBuilder_ == null) {
-          if (connectionId_ != null) {
-            connectionId_ =
-              context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
+      public Builder mergeL0(context.ContextOuterClass.ConnectionSettings_L0 value) {
+        if (l0Builder_ == null) {
+          if (l0_ != null) {
+            l0_ =
+              context.ContextOuterClass.ConnectionSettings_L0.newBuilder(l0_).mergeFrom(value).buildPartial();
           } else {
-            connectionId_ = value;
+            l0_ = value;
           }
           onChanged();
         } else {
-          connectionIdBuilder_.mergeFrom(value);
+          l0Builder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
        */
-      public Builder clearConnectionId() {
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = null;
+      public Builder clearL0() {
+        if (l0Builder_ == null) {
+          l0_ = null;
           onChanged();
         } else {
-          connectionId_ = null;
-          connectionIdBuilder_ = null;
+          l0_ = null;
+          l0Builder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
+      public context.ContextOuterClass.ConnectionSettings_L0.Builder getL0Builder() {
         
         onChanged();
-        return getConnectionIdFieldBuilder().getBuilder();
+        return getL0FieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
-        if (connectionIdBuilder_ != null) {
-          return connectionIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder() {
+        if (l0Builder_ != null) {
+          return l0Builder_.getMessageOrBuilder();
         } else {
-          return connectionId_ == null ?
-              context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+          return l0_ == null ?
+              context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
         }
       }
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
-          getConnectionIdFieldBuilder() {
-        if (connectionIdBuilder_ == null) {
-          connectionIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
-                  getConnectionId(),
+          context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder> 
+          getL0FieldBuilder() {
+        if (l0Builder_ == null) {
+          l0Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder>(
+                  getL0(),
                   getParentForChildren(),
                   isClean());
-          connectionId_ = null;
+          l0_ = null;
         }
-        return connectionIdBuilder_;
+        return l0Builder_;
       }
 
-      private context.ContextOuterClass.ServiceId serviceId_;
+      private context.ContextOuterClass.ConnectionSettings_L2 l2_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
+          context.ContextOuterClass.ConnectionSettings_L2, context.ContextOuterClass.ConnectionSettings_L2.Builder, context.ContextOuterClass.ConnectionSettings_L2OrBuilder> l2Builder_;
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
-       * @return Whether the serviceId field is set.
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       * @return Whether the l2 field is set.
        */
-      public boolean hasServiceId() {
-        return serviceIdBuilder_ != null || serviceId_ != null;
+      public boolean hasL2() {
+        return l2Builder_ != null || l2_ != null;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
-       * @return The serviceId.
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       * @return The l2.
        */
-      public context.ContextOuterClass.ServiceId getServiceId() {
-        if (serviceIdBuilder_ == null) {
-          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+      public context.ContextOuterClass.ConnectionSettings_L2 getL2() {
+        if (l2Builder_ == null) {
+          return l2_ == null ? context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
         } else {
-          return serviceIdBuilder_.getMessage();
+          return l2Builder_.getMessage();
         }
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
-      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
+      public Builder setL2(context.ContextOuterClass.ConnectionSettings_L2 value) {
+        if (l2Builder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          serviceId_ = value;
+          l2_ = value;
           onChanged();
         } else {
-          serviceIdBuilder_.setMessage(value);
+          l2Builder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
-      public Builder setServiceId(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = builderForValue.build();
+      public Builder setL2(
+          context.ContextOuterClass.ConnectionSettings_L2.Builder builderForValue) {
+        if (l2Builder_ == null) {
+          l2_ = builderForValue.build();
           onChanged();
         } else {
-          serviceIdBuilder_.setMessage(builderForValue.build());
+          l2Builder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
-      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
-          if (serviceId_ != null) {
-            serviceId_ =
-              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
+      public Builder mergeL2(context.ContextOuterClass.ConnectionSettings_L2 value) {
+        if (l2Builder_ == null) {
+          if (l2_ != null) {
+            l2_ =
+              context.ContextOuterClass.ConnectionSettings_L2.newBuilder(l2_).mergeFrom(value).buildPartial();
           } else {
-            serviceId_ = value;
+            l2_ = value;
           }
           onChanged();
         } else {
-          serviceIdBuilder_.mergeFrom(value);
+          l2Builder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
-      public Builder clearServiceId() {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
+      public Builder clearL2() {
+        if (l2Builder_ == null) {
+          l2_ = null;
           onChanged();
         } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
+          l2_ = null;
+          l2Builder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
-      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+      public context.ContextOuterClass.ConnectionSettings_L2.Builder getL2Builder() {
         
         onChanged();
-        return getServiceIdFieldBuilder().getBuilder();
+        return getL2FieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
-      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-        if (serviceIdBuilder_ != null) {
-          return serviceIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder() {
+        if (l2Builder_ != null) {
+          return l2Builder_.getMessageOrBuilder();
         } else {
-          return serviceId_ == null ?
-              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+          return l2_ == null ?
+              context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
         }
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getServiceIdFieldBuilder() {
-        if (serviceIdBuilder_ == null) {
-          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  getServiceId(),
+          context.ContextOuterClass.ConnectionSettings_L2, context.ContextOuterClass.ConnectionSettings_L2.Builder, context.ContextOuterClass.ConnectionSettings_L2OrBuilder> 
+          getL2FieldBuilder() {
+        if (l2Builder_ == null) {
+          l2Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionSettings_L2, context.ContextOuterClass.ConnectionSettings_L2.Builder, context.ContextOuterClass.ConnectionSettings_L2OrBuilder>(
+                  getL2(),
                   getParentForChildren(),
                   isClean());
-          serviceId_ = null;
+          l2_ = null;
         }
-        return serviceIdBuilder_;
-      }
-
-      private java.util.List<context.ContextOuterClass.EndPointId> pathHopsEndpointIds_ =
-        java.util.Collections.emptyList();
-      private void ensurePathHopsEndpointIdsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          pathHopsEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(pathHopsEndpointIds_);
-          bitField0_ |= 0x00000001;
-         }
+        return l2Builder_;
       }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> pathHopsEndpointIdsBuilder_;
-
-      /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-       */
-      public java.util.List<context.ContextOuterClass.EndPointId> getPathHopsEndpointIdsList() {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
-        } else {
-          return pathHopsEndpointIdsBuilder_.getMessageList();
-        }
-      }
+      private context.ContextOuterClass.ConnectionSettings_L3 l3_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder> l3Builder_;
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+       * @return Whether the l3 field is set.
        */
-      public int getPathHopsEndpointIdsCount() {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          return pathHopsEndpointIds_.size();
-        } else {
-          return pathHopsEndpointIdsBuilder_.getCount();
-        }
+      public boolean hasL3() {
+        return l3Builder_ != null || l3_ != null;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+       * @return The l3.
        */
-      public context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          return pathHopsEndpointIds_.get(index);
+      public context.ContextOuterClass.ConnectionSettings_L3 getL3() {
+        if (l3Builder_ == null) {
+          return l3_ == null ? context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
         } else {
-          return pathHopsEndpointIdsBuilder_.getMessage(index);
+          return l3Builder_.getMessage();
         }
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder setPathHopsEndpointIds(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
+      public Builder setL3(context.ContextOuterClass.ConnectionSettings_L3 value) {
+        if (l3Builder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.set(index, value);
+          l3_ = value;
           onChanged();
         } else {
-          pathHopsEndpointIdsBuilder_.setMessage(index, value);
+          l3Builder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder setPathHopsEndpointIds(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.set(index, builderForValue.build());
+      public Builder setL3(
+          context.ContextOuterClass.ConnectionSettings_L3.Builder builderForValue) {
+        if (l3Builder_ == null) {
+          l3_ = builderForValue.build();
           onChanged();
         } else {
-          pathHopsEndpointIdsBuilder_.setMessage(index, builderForValue.build());
+          l3Builder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder addPathHopsEndpointIds(context.ContextOuterClass.EndPointId value) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeL3(context.ContextOuterClass.ConnectionSettings_L3 value) {
+        if (l3Builder_ == null) {
+          if (l3_ != null) {
+            l3_ =
+              context.ContextOuterClass.ConnectionSettings_L3.newBuilder(l3_).mergeFrom(value).buildPartial();
+          } else {
+            l3_ = value;
           }
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.add(value);
           onChanged();
         } else {
-          pathHopsEndpointIdsBuilder_.addMessage(value);
+          l3Builder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder addPathHopsEndpointIds(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.add(index, value);
+      public Builder clearL3() {
+        if (l3Builder_ == null) {
+          l3_ = null;
           onChanged();
         } else {
-          pathHopsEndpointIdsBuilder_.addMessage(index, value);
+          l3_ = null;
+          l3Builder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder addPathHopsEndpointIds(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.add(builderForValue.build());
-          onChanged();
-        } else {
-          pathHopsEndpointIdsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
+      public context.ContextOuterClass.ConnectionSettings_L3.Builder getL3Builder() {
+        
+        onChanged();
+        return getL3FieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder addPathHopsEndpointIds(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.add(index, builderForValue.build());
-          onChanged();
+      public context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder() {
+        if (l3Builder_ != null) {
+          return l3Builder_.getMessageOrBuilder();
         } else {
-          pathHopsEndpointIdsBuilder_.addMessage(index, builderForValue.build());
+          return l3_ == null ?
+              context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder addAllPathHopsEndpointIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          ensurePathHopsEndpointIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, pathHopsEndpointIds_);
-          onChanged();
-        } else {
-          pathHopsEndpointIdsBuilder_.addAllMessages(values);
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder> 
+          getL3FieldBuilder() {
+        if (l3Builder_ == null) {
+          l3Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder>(
+                  getL3(),
+                  getParentForChildren(),
+                  isClean());
+          l3_ = null;
         }
-        return this;
+        return l3Builder_;
       }
+
+      private context.ContextOuterClass.ConnectionSettings_L4 l4_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder> l4Builder_;
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+       * @return Whether the l4 field is set.
        */
-      public Builder clearPathHopsEndpointIds() {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          pathHopsEndpointIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
+      public boolean hasL4() {
+        return l4Builder_ != null || l4_ != null;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+       * @return The l4.
+       */
+      public context.ContextOuterClass.ConnectionSettings_L4 getL4() {
+        if (l4Builder_ == null) {
+          return l4_ == null ? context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
         } else {
-          pathHopsEndpointIdsBuilder_.clear();
+          return l4Builder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public Builder removePathHopsEndpointIds(int index) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.remove(index);
+      public Builder setL4(context.ContextOuterClass.ConnectionSettings_L4 value) {
+        if (l4Builder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          l4_ = value;
           onChanged();
         } else {
-          pathHopsEndpointIdsBuilder_.remove(index);
+          l4Builder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder getPathHopsEndpointIdsBuilder(
-          int index) {
-        return getPathHopsEndpointIdsFieldBuilder().getBuilder(index);
+      public Builder setL4(
+          context.ContextOuterClass.ConnectionSettings_L4.Builder builderForValue) {
+        if (l4Builder_ == null) {
+          l4_ = builderForValue.build();
+          onChanged();
+        } else {
+          l4Builder_.setMessage(builderForValue.build());
+        }
+
+        return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
-          int index) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          return pathHopsEndpointIds_.get(index);  } else {
-          return pathHopsEndpointIdsBuilder_.getMessageOrBuilder(index);
+      public Builder mergeL4(context.ContextOuterClass.ConnectionSettings_L4 value) {
+        if (l4Builder_ == null) {
+          if (l4_ != null) {
+            l4_ =
+              context.ContextOuterClass.ConnectionSettings_L4.newBuilder(l4_).mergeFrom(value).buildPartial();
+          } else {
+            l4_ = value;
+          }
+          onChanged();
+        } else {
+          l4Builder_.mergeFrom(value);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-           getPathHopsEndpointIdsOrBuilderList() {
-        if (pathHopsEndpointIdsBuilder_ != null) {
-          return pathHopsEndpointIdsBuilder_.getMessageOrBuilderList();
+      public Builder clearL4() {
+        if (l4Builder_ == null) {
+          l4_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+          l4_ = null;
+          l4Builder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder addPathHopsEndpointIdsBuilder() {
-        return getPathHopsEndpointIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.EndPointId.getDefaultInstance());
+      public context.ContextOuterClass.ConnectionSettings_L4.Builder getL4Builder() {
+        
+        onChanged();
+        return getL4FieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder addPathHopsEndpointIdsBuilder(
-          int index) {
-        return getPathHopsEndpointIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+      public context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder() {
+        if (l4Builder_ != null) {
+          return l4Builder_.getMessageOrBuilder();
+        } else {
+          return l4_ == null ?
+              context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
+        }
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
-           getPathHopsEndpointIdsBuilderList() {
-        return getPathHopsEndpointIdsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getPathHopsEndpointIdsFieldBuilder() {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          pathHopsEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  pathHopsEndpointIds_,
-                  ((bitField0_ & 0x00000001) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder> 
+          getL4FieldBuilder() {
+        if (l4Builder_ == null) {
+          l4Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder>(
+                  getL4(),
                   getParentForChildren(),
                   isClean());
-          pathHopsEndpointIds_ = null;
+          l4_ = null;
+        }
+        return l4Builder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ConnectionSettings)
+    private static final context.ContextOuterClass.ConnectionSettings DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings();
+    }
+
+    public static context.ContextOuterClass.ConnectionSettings getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ConnectionSettings>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings>() {
+      @java.lang.Override
+      public ConnectionSettings parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ConnectionSettings(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ConnectionSettings> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ConnectionSettings> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionSettings getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ConnectionOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Connection)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return Whether the connectionId field is set.
+     */
+    boolean hasConnectionId();
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return The connectionId.
+     */
+    context.ContextOuterClass.ConnectionId getConnectionId();
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     */
+    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
+
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return Whether the serviceId field is set.
+     */
+    boolean hasServiceId();
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return The serviceId.
+     */
+    context.ContextOuterClass.ServiceId getServiceId();
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
+
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    java.util.List<context.ContextOuterClass.EndPointId> 
+        getPathHopsEndpointIdsList();
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index);
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    int getPathHopsEndpointIdsCount();
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getPathHopsEndpointIdsOrBuilderList();
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    java.util.List<context.ContextOuterClass.ServiceId> 
+        getSubServiceIdsList();
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    context.ContextOuterClass.ServiceId getSubServiceIds(int index);
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    int getSubServiceIdsCount();
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getSubServiceIdsOrBuilderList();
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     * @return Whether the settings field is set.
+     */
+    boolean hasSettings();
+    /**
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     * @return The settings.
+     */
+    context.ContextOuterClass.ConnectionSettings getSettings();
+    /**
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     */
+    context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder();
+  }
+  /**
+   * Protobuf type {@code context.Connection}
+   */
+  public static final class Connection extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Connection)
+      ConnectionOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Connection.newBuilder() to construct.
+    private Connection(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Connection() {
+      pathHopsEndpointIds_ = java.util.Collections.emptyList();
+      subServiceIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Connection();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Connection(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.ConnectionId.Builder subBuilder = null;
+              if (connectionId_ != null) {
+                subBuilder = connectionId_.toBuilder();
+              }
+              connectionId_ = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(connectionId_);
+                connectionId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
+              if (serviceId_ != null) {
+                subBuilder = serviceId_.toBuilder();
+              }
+              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(serviceId_);
+                serviceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 26: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                pathHopsEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              pathHopsEndpointIds_.add(
+                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
+              break;
+            }
+            case 34: {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                subServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              subServiceIds_.add(
+                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
+              break;
+            }
+            case 42: {
+              context.ContextOuterClass.ConnectionSettings.Builder subBuilder = null;
+              if (settings_ != null) {
+                subBuilder = settings_.toBuilder();
+              }
+              settings_ = input.readMessage(context.ContextOuterClass.ConnectionSettings.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(settings_);
+                settings_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          pathHopsEndpointIds_ = java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+        }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          subServiceIds_ = java.util.Collections.unmodifiableList(subServiceIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Connection_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Connection.class, context.ContextOuterClass.Connection.Builder.class);
+    }
+
+    public static final int CONNECTION_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ConnectionId connectionId_;
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return Whether the connectionId field is set.
+     */
+    @java.lang.Override
+    public boolean hasConnectionId() {
+      return connectionId_ != null;
+    }
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return The connectionId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionId getConnectionId() {
+      return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+    }
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+      return getConnectionId();
+    }
+
+    public static final int SERVICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ServiceId serviceId_;
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return Whether the serviceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasServiceId() {
+      return serviceId_ != null;
+    }
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return The serviceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getServiceId() {
+      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+    }
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+      return getServiceId();
+    }
+
+    public static final int PATH_HOPS_ENDPOINT_IDS_FIELD_NUMBER = 3;
+    private java.util.List<context.ContextOuterClass.EndPointId> pathHopsEndpointIds_;
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.EndPointId> getPathHopsEndpointIdsList() {
+      return pathHopsEndpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getPathHopsEndpointIdsOrBuilderList() {
+      return pathHopsEndpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public int getPathHopsEndpointIdsCount() {
+      return pathHopsEndpointIds_.size();
+    }
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index) {
+      return pathHopsEndpointIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
+        int index) {
+      return pathHopsEndpointIds_.get(index);
+    }
+
+    public static final int SUB_SERVICE_IDS_FIELD_NUMBER = 4;
+    private java.util.List<context.ContextOuterClass.ServiceId> subServiceIds_;
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ServiceId> getSubServiceIdsList() {
+      return subServiceIds_;
+    }
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getSubServiceIdsOrBuilderList() {
+      return subServiceIds_;
+    }
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public int getSubServiceIdsCount() {
+      return subServiceIds_.size();
+    }
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getSubServiceIds(int index) {
+      return subServiceIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
+        int index) {
+      return subServiceIds_.get(index);
+    }
+
+    public static final int SETTINGS_FIELD_NUMBER = 5;
+    private context.ContextOuterClass.ConnectionSettings settings_;
+    /**
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     * @return Whether the settings field is set.
+     */
+    @java.lang.Override
+    public boolean hasSettings() {
+      return settings_ != null;
+    }
+    /**
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     * @return The settings.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionSettings getSettings() {
+      return settings_ == null ? context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
+    }
+    /**
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder() {
+      return getSettings();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (connectionId_ != null) {
+        output.writeMessage(1, getConnectionId());
+      }
+      if (serviceId_ != null) {
+        output.writeMessage(2, getServiceId());
+      }
+      for (int i = 0; i < pathHopsEndpointIds_.size(); i++) {
+        output.writeMessage(3, pathHopsEndpointIds_.get(i));
+      }
+      for (int i = 0; i < subServiceIds_.size(); i++) {
+        output.writeMessage(4, subServiceIds_.get(i));
+      }
+      if (settings_ != null) {
+        output.writeMessage(5, getSettings());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (connectionId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getConnectionId());
+      }
+      if (serviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getServiceId());
+      }
+      for (int i = 0; i < pathHopsEndpointIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, pathHopsEndpointIds_.get(i));
+      }
+      for (int i = 0; i < subServiceIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, subServiceIds_.get(i));
+      }
+      if (settings_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, getSettings());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.Connection)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Connection other = (context.ContextOuterClass.Connection) obj;
+
+      if (hasConnectionId() != other.hasConnectionId()) return false;
+      if (hasConnectionId()) {
+        if (!getConnectionId()
+            .equals(other.getConnectionId())) return false;
+      }
+      if (hasServiceId() != other.hasServiceId()) return false;
+      if (hasServiceId()) {
+        if (!getServiceId()
+            .equals(other.getServiceId())) return false;
+      }
+      if (!getPathHopsEndpointIdsList()
+          .equals(other.getPathHopsEndpointIdsList())) return false;
+      if (!getSubServiceIdsList()
+          .equals(other.getSubServiceIdsList())) return false;
+      if (hasSettings() != other.hasSettings()) return false;
+      if (hasSettings()) {
+        if (!getSettings()
+            .equals(other.getSettings())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasConnectionId()) {
+        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionId().hashCode();
+      }
+      if (hasServiceId()) {
+        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceId().hashCode();
+      }
+      if (getPathHopsEndpointIdsCount() > 0) {
+        hash = (37 * hash) + PATH_HOPS_ENDPOINT_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getPathHopsEndpointIdsList().hashCode();
+      }
+      if (getSubServiceIdsCount() > 0) {
+        hash = (37 * hash) + SUB_SERVICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getSubServiceIdsList().hashCode();
+      }
+      if (hasSettings()) {
+        hash = (37 * hash) + SETTINGS_FIELD_NUMBER;
+        hash = (53 * hash) + getSettings().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.Connection parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Connection parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Connection parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.Connection prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.Connection}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.Connection)
+        context.ContextOuterClass.ConnectionOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Connection_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Connection.class, context.ContextOuterClass.Connection.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Connection.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getPathHopsEndpointIdsFieldBuilder();
+          getSubServiceIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
+        } else {
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
+        }
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          pathHopsEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          pathHopsEndpointIdsBuilder_.clear();
+        }
+        if (subServiceIdsBuilder_ == null) {
+          subServiceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          subServiceIdsBuilder_.clear();
+        }
+        if (settingsBuilder_ == null) {
+          settings_ = null;
+        } else {
+          settings_ = null;
+          settingsBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Connection getDefaultInstanceForType() {
+        return context.ContextOuterClass.Connection.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Connection build() {
+        context.ContextOuterClass.Connection result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Connection buildPartial() {
+        context.ContextOuterClass.Connection result = new context.ContextOuterClass.Connection(this);
+        int from_bitField0_ = bitField0_;
+        if (connectionIdBuilder_ == null) {
+          result.connectionId_ = connectionId_;
+        } else {
+          result.connectionId_ = connectionIdBuilder_.build();
+        }
+        if (serviceIdBuilder_ == null) {
+          result.serviceId_ = serviceId_;
+        } else {
+          result.serviceId_ = serviceIdBuilder_.build();
+        }
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            pathHopsEndpointIds_ = java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.pathHopsEndpointIds_ = pathHopsEndpointIds_;
+        } else {
+          result.pathHopsEndpointIds_ = pathHopsEndpointIdsBuilder_.build();
+        }
+        if (subServiceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) != 0)) {
+            subServiceIds_ = java.util.Collections.unmodifiableList(subServiceIds_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.subServiceIds_ = subServiceIds_;
+        } else {
+          result.subServiceIds_ = subServiceIdsBuilder_.build();
+        }
+        if (settingsBuilder_ == null) {
+          result.settings_ = settings_;
+        } else {
+          result.settings_ = settingsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.Connection) {
+          return mergeFrom((context.ContextOuterClass.Connection)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.Connection other) {
+        if (other == context.ContextOuterClass.Connection.getDefaultInstance()) return this;
+        if (other.hasConnectionId()) {
+          mergeConnectionId(other.getConnectionId());
+        }
+        if (other.hasServiceId()) {
+          mergeServiceId(other.getServiceId());
+        }
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (!other.pathHopsEndpointIds_.isEmpty()) {
+            if (pathHopsEndpointIds_.isEmpty()) {
+              pathHopsEndpointIds_ = other.pathHopsEndpointIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensurePathHopsEndpointIdsIsMutable();
+              pathHopsEndpointIds_.addAll(other.pathHopsEndpointIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.pathHopsEndpointIds_.isEmpty()) {
+            if (pathHopsEndpointIdsBuilder_.isEmpty()) {
+              pathHopsEndpointIdsBuilder_.dispose();
+              pathHopsEndpointIdsBuilder_ = null;
+              pathHopsEndpointIds_ = other.pathHopsEndpointIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              pathHopsEndpointIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getPathHopsEndpointIdsFieldBuilder() : null;
+            } else {
+              pathHopsEndpointIdsBuilder_.addAllMessages(other.pathHopsEndpointIds_);
+            }
+          }
+        }
+        if (subServiceIdsBuilder_ == null) {
+          if (!other.subServiceIds_.isEmpty()) {
+            if (subServiceIds_.isEmpty()) {
+              subServiceIds_ = other.subServiceIds_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureSubServiceIdsIsMutable();
+              subServiceIds_.addAll(other.subServiceIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.subServiceIds_.isEmpty()) {
+            if (subServiceIdsBuilder_.isEmpty()) {
+              subServiceIdsBuilder_.dispose();
+              subServiceIdsBuilder_ = null;
+              subServiceIds_ = other.subServiceIds_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              subServiceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getSubServiceIdsFieldBuilder() : null;
+            } else {
+              subServiceIdsBuilder_.addAllMessages(other.subServiceIds_);
+            }
+          }
+        }
+        if (other.hasSettings()) {
+          mergeSettings(other.getSettings());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Connection parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Connection) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private context.ContextOuterClass.ConnectionId connectionId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdBuilder_;
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       * @return Whether the connectionId field is set.
+       */
+      public boolean hasConnectionId() {
+        return connectionIdBuilder_ != null || connectionId_ != null;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       * @return The connectionId.
+       */
+      public context.ContextOuterClass.ConnectionId getConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+        } else {
+          return connectionIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public Builder setConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          connectionId_ = value;
+          onChanged();
+        } else {
+          connectionIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public Builder setConnectionId(
+          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = builderForValue.build();
+          onChanged();
+        } else {
+          connectionIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
+          if (connectionId_ != null) {
+            connectionId_ =
+              context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
+          } else {
+            connectionId_ = value;
+          }
+          onChanged();
+        } else {
+          connectionIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public Builder clearConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
+          onChanged();
+        } else {
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
+        
+        onChanged();
+        return getConnectionIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+        if (connectionIdBuilder_ != null) {
+          return connectionIdBuilder_.getMessageOrBuilder();
+        } else {
+          return connectionId_ == null ?
+              context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+        }
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
+          getConnectionIdFieldBuilder() {
+        if (connectionIdBuilder_ == null) {
+          connectionIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
+                  getConnectionId(),
+                  getParentForChildren(),
+                  isClean());
+          connectionId_ = null;
+        }
+        return connectionIdBuilder_;
+      }
+
+      private context.ContextOuterClass.ServiceId serviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       * @return Whether the serviceId field is set.
+       */
+      public boolean hasServiceId() {
+        return serviceIdBuilder_ != null || serviceId_ != null;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       * @return The serviceId.
+       */
+      public context.ContextOuterClass.ServiceId getServiceId() {
+        if (serviceIdBuilder_ == null) {
+          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        } else {
+          return serviceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceId_ = value;
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public Builder setServiceId(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (serviceId_ != null) {
+            serviceId_ =
+              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
+          } else {
+            serviceId_ = value;
+          }
+          onChanged();
+        } else {
+          serviceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public Builder clearServiceId() {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+          onChanged();
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+        
+        onChanged();
+        return getServiceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+        if (serviceIdBuilder_ != null) {
+          return serviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdFieldBuilder() {
+        if (serviceIdBuilder_ == null) {
+          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  getServiceId(),
+                  getParentForChildren(),
+                  isClean());
+          serviceId_ = null;
+        }
+        return serviceIdBuilder_;
+      }
+
+      private java.util.List<context.ContextOuterClass.EndPointId> pathHopsEndpointIds_ =
+        java.util.Collections.emptyList();
+      private void ensurePathHopsEndpointIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          pathHopsEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(pathHopsEndpointIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> pathHopsEndpointIdsBuilder_;
+
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId> getPathHopsEndpointIdsList() {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+        } else {
+          return pathHopsEndpointIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public int getPathHopsEndpointIdsCount() {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          return pathHopsEndpointIds_.size();
+        } else {
+          return pathHopsEndpointIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          return pathHopsEndpointIds_.get(index);
+        } else {
+          return pathHopsEndpointIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder setPathHopsEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.set(index, value);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder setPathHopsEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addPathHopsEndpointIds(context.ContextOuterClass.EndPointId value) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.add(value);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addPathHopsEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.add(index, value);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addPathHopsEndpointIds(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addPathHopsEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addAllPathHopsEndpointIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, pathHopsEndpointIds_);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder clearPathHopsEndpointIds() {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          pathHopsEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder removePathHopsEndpointIds(int index) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.remove(index);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getPathHopsEndpointIdsBuilder(
+          int index) {
+        return getPathHopsEndpointIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
+          int index) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          return pathHopsEndpointIds_.get(index);  } else {
+          return pathHopsEndpointIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+           getPathHopsEndpointIdsOrBuilderList() {
+        if (pathHopsEndpointIdsBuilder_ != null) {
+          return pathHopsEndpointIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addPathHopsEndpointIdsBuilder() {
+        return getPathHopsEndpointIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addPathHopsEndpointIdsBuilder(
+          int index) {
+        return getPathHopsEndpointIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
+           getPathHopsEndpointIdsBuilderList() {
+        return getPathHopsEndpointIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getPathHopsEndpointIdsFieldBuilder() {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          pathHopsEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  pathHopsEndpointIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          pathHopsEndpointIds_ = null;
+        }
+        return pathHopsEndpointIdsBuilder_;
+      }
+
+      private java.util.List<context.ContextOuterClass.ServiceId> subServiceIds_ =
+        java.util.Collections.emptyList();
+      private void ensureSubServiceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          subServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(subServiceIds_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> subServiceIdsBuilder_;
+
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ServiceId> getSubServiceIdsList() {
+        if (subServiceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(subServiceIds_);
+        } else {
+          return subServiceIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public int getSubServiceIdsCount() {
+        if (subServiceIdsBuilder_ == null) {
+          return subServiceIds_.size();
+        } else {
+          return subServiceIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public context.ContextOuterClass.ServiceId getSubServiceIds(int index) {
+        if (subServiceIdsBuilder_ == null) {
+          return subServiceIds_.get(index);
+        } else {
+          return subServiceIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder setSubServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (subServiceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.set(index, value);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder setSubServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder addSubServiceIds(context.ContextOuterClass.ServiceId value) {
+        if (subServiceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.add(value);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder addSubServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (subServiceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.add(index, value);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder addSubServiceIds(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder addSubServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder addAllSubServiceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, subServiceIds_);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder clearSubServiceIds() {
+        if (subServiceIdsBuilder_ == null) {
+          subServiceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder removeSubServiceIds(int index) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.remove(index);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getSubServiceIdsBuilder(
+          int index) {
+        return getSubServiceIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
+          int index) {
+        if (subServiceIdsBuilder_ == null) {
+          return subServiceIds_.get(index);  } else {
+          return subServiceIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+           getSubServiceIdsOrBuilderList() {
+        if (subServiceIdsBuilder_ != null) {
+          return subServiceIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(subServiceIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder addSubServiceIdsBuilder() {
+        return getSubServiceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ServiceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder addSubServiceIdsBuilder(
+          int index) {
+        return getSubServiceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
+           getSubServiceIdsBuilderList() {
+        return getSubServiceIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getSubServiceIdsFieldBuilder() {
+        if (subServiceIdsBuilder_ == null) {
+          subServiceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  subServiceIds_,
+                  ((bitField0_ & 0x00000002) != 0),
+                  getParentForChildren(),
+                  isClean());
+          subServiceIds_ = null;
+        }
+        return subServiceIdsBuilder_;
+      }
+
+      private context.ContextOuterClass.ConnectionSettings settings_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings, context.ContextOuterClass.ConnectionSettings.Builder, context.ContextOuterClass.ConnectionSettingsOrBuilder> settingsBuilder_;
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       * @return Whether the settings field is set.
+       */
+      public boolean hasSettings() {
+        return settingsBuilder_ != null || settings_ != null;
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       * @return The settings.
+       */
+      public context.ContextOuterClass.ConnectionSettings getSettings() {
+        if (settingsBuilder_ == null) {
+          return settings_ == null ? context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
+        } else {
+          return settingsBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      public Builder setSettings(context.ContextOuterClass.ConnectionSettings value) {
+        if (settingsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          settings_ = value;
+          onChanged();
+        } else {
+          settingsBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      public Builder setSettings(
+          context.ContextOuterClass.ConnectionSettings.Builder builderForValue) {
+        if (settingsBuilder_ == null) {
+          settings_ = builderForValue.build();
+          onChanged();
+        } else {
+          settingsBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      public Builder mergeSettings(context.ContextOuterClass.ConnectionSettings value) {
+        if (settingsBuilder_ == null) {
+          if (settings_ != null) {
+            settings_ =
+              context.ContextOuterClass.ConnectionSettings.newBuilder(settings_).mergeFrom(value).buildPartial();
+          } else {
+            settings_ = value;
+          }
+          onChanged();
+        } else {
+          settingsBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      public Builder clearSettings() {
+        if (settingsBuilder_ == null) {
+          settings_ = null;
+          onChanged();
+        } else {
+          settings_ = null;
+          settingsBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      public context.ContextOuterClass.ConnectionSettings.Builder getSettingsBuilder() {
+        
+        onChanged();
+        return getSettingsFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      public context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder() {
+        if (settingsBuilder_ != null) {
+          return settingsBuilder_.getMessageOrBuilder();
+        } else {
+          return settings_ == null ?
+              context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
+        }
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings, context.ContextOuterClass.ConnectionSettings.Builder, context.ContextOuterClass.ConnectionSettingsOrBuilder> 
+          getSettingsFieldBuilder() {
+        if (settingsBuilder_ == null) {
+          settingsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionSettings, context.ContextOuterClass.ConnectionSettings.Builder, context.ContextOuterClass.ConnectionSettingsOrBuilder>(
+                  getSettings(),
+                  getParentForChildren(),
+                  isClean());
+          settings_ = null;
+        }
+        return settingsBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.Connection)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Connection)
+    private static final context.ContextOuterClass.Connection DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Connection();
+    }
+
+    public static context.ContextOuterClass.Connection getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Connection>
+        PARSER = new com.google.protobuf.AbstractParser<Connection>() {
+      @java.lang.Override
+      public Connection parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Connection(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Connection> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Connection> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Connection getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ConnectionIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionIdList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.ConnectionId> 
+        getConnectionIdsList();
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    context.ContextOuterClass.ConnectionId getConnectionIds(int index);
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    int getConnectionIdsCount();
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
+        getConnectionIdsOrBuilderList();
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.ConnectionIdList}
+   */
+  public static final class ConnectionIdList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ConnectionIdList)
+      ConnectionIdListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ConnectionIdList.newBuilder() to construct.
+    private ConnectionIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ConnectionIdList() {
+      connectionIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ConnectionIdList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ConnectionIdList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                connectionIds_ = new java.util.ArrayList<context.ContextOuterClass.ConnectionId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              connectionIds_.add(
+                  input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
+    }
+
+    public static final int CONNECTION_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_;
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
+      return connectionIds_;
+    }
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
+        getConnectionIdsOrBuilderList() {
+      return connectionIds_;
+    }
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public int getConnectionIdsCount() {
+      return connectionIds_.size();
+    }
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
+      return connectionIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+        int index) {
+      return connectionIds_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < connectionIds_.size(); i++) {
+        output.writeMessage(1, connectionIds_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < connectionIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, connectionIds_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.ConnectionIdList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ConnectionIdList other = (context.ContextOuterClass.ConnectionIdList) obj;
+
+      if (!getConnectionIdsList()
+          .equals(other.getConnectionIdsList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getConnectionIdsCount() > 0) {
+        hash = (37 * hash) + CONNECTION_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionIdsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionIdList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.ConnectionIdList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ConnectionIdList)
+        context.ContextOuterClass.ConnectionIdListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ConnectionIdList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getConnectionIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (connectionIdsBuilder_ == null) {
+          connectionIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          connectionIdsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionIdList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionIdList build() {
+        context.ContextOuterClass.ConnectionIdList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionIdList buildPartial() {
+        context.ContextOuterClass.ConnectionIdList result = new context.ContextOuterClass.ConnectionIdList(this);
+        int from_bitField0_ = bitField0_;
+        if (connectionIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.connectionIds_ = connectionIds_;
+        } else {
+          result.connectionIds_ = connectionIdsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ConnectionIdList) {
+          return mergeFrom((context.ContextOuterClass.ConnectionIdList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionIdList other) {
+        if (other == context.ContextOuterClass.ConnectionIdList.getDefaultInstance()) return this;
+        if (connectionIdsBuilder_ == null) {
+          if (!other.connectionIds_.isEmpty()) {
+            if (connectionIds_.isEmpty()) {
+              connectionIds_ = other.connectionIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureConnectionIdsIsMutable();
+              connectionIds_.addAll(other.connectionIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.connectionIds_.isEmpty()) {
+            if (connectionIdsBuilder_.isEmpty()) {
+              connectionIdsBuilder_.dispose();
+              connectionIdsBuilder_ = null;
+              connectionIds_ = other.connectionIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              connectionIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getConnectionIdsFieldBuilder() : null;
+            } else {
+              connectionIdsBuilder_.addAllMessages(other.connectionIds_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ConnectionIdList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ConnectionIdList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
         }
-        return pathHopsEndpointIdsBuilder_;
+        return this;
       }
+      private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.ServiceId> subServiceIds_ =
+      private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_ =
         java.util.Collections.emptyList();
-      private void ensureSubServiceIdsIsMutable() {
-        if (!((bitField0_ & 0x00000002) != 0)) {
-          subServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(subServiceIds_);
-          bitField0_ |= 0x00000002;
+      private void ensureConnectionIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          connectionIds_ = new java.util.ArrayList<context.ContextOuterClass.ConnectionId>(connectionIds_);
+          bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> subServiceIdsBuilder_;
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdsBuilder_;
 
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.ServiceId> getSubServiceIdsList() {
-        if (subServiceIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(subServiceIds_);
+      public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
+        if (connectionIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(connectionIds_);
         } else {
-          return subServiceIdsBuilder_.getMessageList();
+          return connectionIdsBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public int getSubServiceIdsCount() {
-        if (subServiceIdsBuilder_ == null) {
-          return subServiceIds_.size();
+      public int getConnectionIdsCount() {
+        if (connectionIdsBuilder_ == null) {
+          return connectionIds_.size();
         } else {
-          return subServiceIdsBuilder_.getCount();
+          return connectionIdsBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public context.ContextOuterClass.ServiceId getSubServiceIds(int index) {
-        if (subServiceIdsBuilder_ == null) {
-          return subServiceIds_.get(index);
+      public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
+        if (connectionIdsBuilder_ == null) {
+          return connectionIds_.get(index);
         } else {
-          return subServiceIdsBuilder_.getMessage(index);
+          return connectionIdsBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder setSubServiceIds(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (subServiceIdsBuilder_ == null) {
+      public Builder setConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.set(index, value);
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public Builder setSubServiceIds(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (subServiceIdsBuilder_ == null) {
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.set(index, builderForValue.build());
+          ensureConnectionIdsIsMutable();
+          connectionIds_.set(index, value);
           onChanged();
         } else {
-          subServiceIdsBuilder_.setMessage(index, builderForValue.build());
+          connectionIdsBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder addSubServiceIds(context.ContextOuterClass.ServiceId value) {
-        if (subServiceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.add(value);
+      public Builder setConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.set(index, builderForValue.build());
           onChanged();
         } else {
-          subServiceIdsBuilder_.addMessage(value);
+          connectionIdsBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder addSubServiceIds(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (subServiceIdsBuilder_ == null) {
+      public Builder addConnectionIds(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.add(index, value);
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.addMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public Builder addSubServiceIds(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (subServiceIdsBuilder_ == null) {
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.add(builderForValue.build());
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public Builder addSubServiceIds(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (subServiceIdsBuilder_ == null) {
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public Builder addAllSubServiceIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
-        if (subServiceIdsBuilder_ == null) {
-          ensureSubServiceIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, subServiceIds_);
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.addAllMessages(values);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public Builder clearSubServiceIds() {
-        if (subServiceIdsBuilder_ == null) {
-          subServiceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.clear();
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public Builder removeSubServiceIds(int index) {
-        if (subServiceIdsBuilder_ == null) {
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.remove(index);
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.remove(index);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder getSubServiceIdsBuilder(
-          int index) {
-        return getSubServiceIdsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
-          int index) {
-        if (subServiceIdsBuilder_ == null) {
-          return subServiceIds_.get(index);  } else {
-          return subServiceIdsBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-           getSubServiceIdsOrBuilderList() {
-        if (subServiceIdsBuilder_ != null) {
-          return subServiceIdsBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(subServiceIds_);
-        }
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder addSubServiceIdsBuilder() {
-        return getSubServiceIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.ServiceId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder addSubServiceIdsBuilder(
-          int index) {
-        return getSubServiceIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
-           getSubServiceIdsBuilderList() {
-        return getSubServiceIdsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getSubServiceIdsFieldBuilder() {
-        if (subServiceIdsBuilder_ == null) {
-          subServiceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  subServiceIds_,
-                  ((bitField0_ & 0x00000002) != 0),
-                  getParentForChildren(),
-                  isClean());
-          subServiceIds_ = null;
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(value);
+          onChanged();
+        } else {
+          connectionIdsBuilder_.addMessage(value);
         }
-        return subServiceIdsBuilder_;
+        return this;
       }
-
-      private context.ContextOuterClass.ConnectionSettings settings_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings, context.ContextOuterClass.ConnectionSettings.Builder, context.ContextOuterClass.ConnectionSettingsOrBuilder> settingsBuilder_;
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
-       * @return Whether the settings field is set.
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public boolean hasSettings() {
-        return settingsBuilder_ != null || settings_ != null;
+      public Builder addConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(index, value);
+          onChanged();
+        } else {
+          connectionIdsBuilder_.addMessage(index, value);
+        }
+        return this;
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
-       * @return The settings.
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionSettings getSettings() {
-        if (settingsBuilder_ == null) {
-          return settings_ == null ? context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
+      public Builder addConnectionIds(
+          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(builderForValue.build());
+          onChanged();
         } else {
-          return settingsBuilder_.getMessage();
+          connectionIdsBuilder_.addMessage(builderForValue.build());
         }
+        return this;
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder setSettings(context.ContextOuterClass.ConnectionSettings value) {
-        if (settingsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          settings_ = value;
+      public Builder addConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(index, builderForValue.build());
           onChanged();
         } else {
-          settingsBuilder_.setMessage(value);
+          connectionIdsBuilder_.addMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder setSettings(
-          context.ContextOuterClass.ConnectionSettings.Builder builderForValue) {
-        if (settingsBuilder_ == null) {
-          settings_ = builderForValue.build();
+      public Builder addAllConnectionIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.ConnectionId> values) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, connectionIds_);
           onChanged();
         } else {
-          settingsBuilder_.setMessage(builderForValue.build());
+          connectionIdsBuilder_.addAllMessages(values);
         }
-
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder mergeSettings(context.ContextOuterClass.ConnectionSettings value) {
-        if (settingsBuilder_ == null) {
-          if (settings_ != null) {
-            settings_ =
-              context.ContextOuterClass.ConnectionSettings.newBuilder(settings_).mergeFrom(value).buildPartial();
-          } else {
-            settings_ = value;
-          }
+      public Builder clearConnectionIds() {
+        if (connectionIdsBuilder_ == null) {
+          connectionIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          settingsBuilder_.mergeFrom(value);
+          connectionIdsBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder clearSettings() {
-        if (settingsBuilder_ == null) {
-          settings_ = null;
+      public Builder removeConnectionIds(int index) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.remove(index);
           onChanged();
         } else {
-          settings_ = null;
-          settingsBuilder_ = null;
+          connectionIdsBuilder_.remove(index);
         }
-
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionSettings.Builder getSettingsBuilder() {
-        
-        onChanged();
-        return getSettingsFieldBuilder().getBuilder();
+      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdsBuilder(
+          int index) {
+        return getConnectionIdsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder() {
-        if (settingsBuilder_ != null) {
-          return settingsBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+          int index) {
+        if (connectionIdsBuilder_ == null) {
+          return connectionIds_.get(index);  } else {
+          return connectionIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
+           getConnectionIdsOrBuilderList() {
+        if (connectionIdsBuilder_ != null) {
+          return connectionIdsBuilder_.getMessageOrBuilderList();
         } else {
-          return settings_ == null ?
-              context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
+          return java.util.Collections.unmodifiableList(connectionIds_);
         }
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings, context.ContextOuterClass.ConnectionSettings.Builder, context.ContextOuterClass.ConnectionSettingsOrBuilder> 
-          getSettingsFieldBuilder() {
-        if (settingsBuilder_ == null) {
-          settingsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionSettings, context.ContextOuterClass.ConnectionSettings.Builder, context.ContextOuterClass.ConnectionSettingsOrBuilder>(
-                  getSettings(),
+      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder() {
+        return getConnectionIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ConnectionId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder(
+          int index) {
+        return getConnectionIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ConnectionId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ConnectionId.Builder> 
+           getConnectionIdsBuilderList() {
+        return getConnectionIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
+          getConnectionIdsFieldBuilder() {
+        if (connectionIdsBuilder_ == null) {
+          connectionIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
+                  connectionIds_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          settings_ = null;
+          connectionIds_ = null;
         }
-        return settingsBuilder_;
+        return connectionIdsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -42845,95 +44634,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Connection)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionIdList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Connection)
-    private static final context.ContextOuterClass.Connection DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionIdList)
+    private static final context.ContextOuterClass.ConnectionIdList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Connection();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionIdList();
     }
 
-    public static context.ContextOuterClass.Connection getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionIdList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Connection>
-        PARSER = new com.google.protobuf.AbstractParser<Connection>() {
+    private static final com.google.protobuf.Parser<ConnectionIdList>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionIdList>() {
       @java.lang.Override
-      public Connection parsePartialFrom(
+      public ConnectionIdList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Connection(input, extensionRegistry);
+        return new ConnectionIdList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Connection> parser() {
+    public static com.google.protobuf.Parser<ConnectionIdList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Connection> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionIdList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Connection getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionIdListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionIdList)
+  public interface ConnectionListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
-    java.util.List<context.ContextOuterClass.ConnectionId> 
-        getConnectionIdsList();
+    java.util.List<context.ContextOuterClass.Connection> 
+        getConnectionsList();
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
-    context.ContextOuterClass.ConnectionId getConnectionIds(int index);
+    context.ContextOuterClass.Connection getConnections(int index);
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
-    int getConnectionIdsCount();
+    int getConnectionsCount();
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
-    java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
-        getConnectionIdsOrBuilderList();
+    java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
+        getConnectionsOrBuilderList();
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
-    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+    context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
         int index);
   }
   /**
-   * Protobuf type {@code context.ConnectionIdList}
+   * Protobuf type {@code context.ConnectionList}
    */
-  public static final class ConnectionIdList extends
+  public static final class ConnectionList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionIdList)
-      ConnectionIdListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionList)
+      ConnectionListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionIdList.newBuilder() to construct.
-    private ConnectionIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionList.newBuilder() to construct.
+    private ConnectionList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionIdList() {
-      connectionIds_ = java.util.Collections.emptyList();
+    private ConnectionList() {
+      connections_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionIdList();
+      return new ConnectionList();
     }
 
     @java.lang.Override
@@ -42941,7 +44730,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionIdList(
+    private ConnectionList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -42962,11 +44751,11 @@ public final class ContextOuterClass {
               break;
             case 10: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                connectionIds_ = new java.util.ArrayList<context.ContextOuterClass.ConnectionId>();
+                connections_ = new java.util.ArrayList<context.ContextOuterClass.Connection>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              connectionIds_.add(
-                  input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry));
+              connections_.add(
+                  input.readMessage(context.ContextOuterClass.Connection.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -42985,7 +44774,7 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
+          connections_ = java.util.Collections.unmodifiableList(connections_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -42993,55 +44782,55 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
+              context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
     }
 
-    public static final int CONNECTION_IDS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_;
+    public static final int CONNECTIONS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Connection> connections_;
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
-      return connectionIds_;
+    public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
+      return connections_;
     }
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
-        getConnectionIdsOrBuilderList() {
-      return connectionIds_;
+    public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
+        getConnectionsOrBuilderList() {
+      return connections_;
     }
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public int getConnectionIdsCount() {
-      return connectionIds_.size();
+    public int getConnectionsCount() {
+      return connections_.size();
     }
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
-      return connectionIds_.get(index);
+    public context.ContextOuterClass.Connection getConnections(int index) {
+      return connections_.get(index);
     }
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+    public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
         int index) {
-      return connectionIds_.get(index);
+      return connections_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -43058,8 +44847,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < connectionIds_.size(); i++) {
-        output.writeMessage(1, connectionIds_.get(i));
+      for (int i = 0; i < connections_.size(); i++) {
+        output.writeMessage(1, connections_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -43070,9 +44859,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < connectionIds_.size(); i++) {
+      for (int i = 0; i < connections_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, connectionIds_.get(i));
+          .computeMessageSize(1, connections_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -43084,13 +44873,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionIdList)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionIdList other = (context.ContextOuterClass.ConnectionIdList) obj;
+      context.ContextOuterClass.ConnectionList other = (context.ContextOuterClass.ConnectionList) obj;
 
-      if (!getConnectionIdsList()
-          .equals(other.getConnectionIdsList())) return false;
+      if (!getConnectionsList()
+          .equals(other.getConnectionsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -43102,78 +44891,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getConnectionIdsCount() > 0) {
-        hash = (37 * hash) + CONNECTION_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionIdsList().hashCode();
+      if (getConnectionsCount() > 0) {
+        hash = (37 * hash) + CONNECTIONS_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionsList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -43186,7 +44975,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionIdList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -43202,26 +44991,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionIdList}
+     * Protobuf type {@code context.ConnectionList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionIdList)
-        context.ContextOuterClass.ConnectionIdListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionList)
+        context.ContextOuterClass.ConnectionListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
+                context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionIdList.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -43234,17 +45023,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getConnectionIdsFieldBuilder();
+          getConnectionsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (connectionIdsBuilder_ == null) {
-          connectionIds_ = java.util.Collections.emptyList();
+        if (connectionsBuilder_ == null) {
+          connections_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          connectionIdsBuilder_.clear();
+          connectionsBuilder_.clear();
         }
         return this;
       }
@@ -43252,17 +45041,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionIdList.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionIdList build() {
-        context.ContextOuterClass.ConnectionIdList result = buildPartial();
+      public context.ContextOuterClass.ConnectionList build() {
+        context.ContextOuterClass.ConnectionList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -43270,17 +45059,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionIdList buildPartial() {
-        context.ContextOuterClass.ConnectionIdList result = new context.ContextOuterClass.ConnectionIdList(this);
+      public context.ContextOuterClass.ConnectionList buildPartial() {
+        context.ContextOuterClass.ConnectionList result = new context.ContextOuterClass.ConnectionList(this);
         int from_bitField0_ = bitField0_;
-        if (connectionIdsBuilder_ == null) {
+        if (connectionsBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
+            connections_ = java.util.Collections.unmodifiableList(connections_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.connectionIds_ = connectionIds_;
+          result.connections_ = connections_;
         } else {
-          result.connectionIds_ = connectionIdsBuilder_.build();
+          result.connections_ = connectionsBuilder_.build();
         }
         onBuilt();
         return result;
@@ -43320,39 +45109,39 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionIdList) {
-          return mergeFrom((context.ContextOuterClass.ConnectionIdList)other);
+        if (other instanceof context.ContextOuterClass.ConnectionList) {
+          return mergeFrom((context.ContextOuterClass.ConnectionList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionIdList other) {
-        if (other == context.ContextOuterClass.ConnectionIdList.getDefaultInstance()) return this;
-        if (connectionIdsBuilder_ == null) {
-          if (!other.connectionIds_.isEmpty()) {
-            if (connectionIds_.isEmpty()) {
-              connectionIds_ = other.connectionIds_;
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionList other) {
+        if (other == context.ContextOuterClass.ConnectionList.getDefaultInstance()) return this;
+        if (connectionsBuilder_ == null) {
+          if (!other.connections_.isEmpty()) {
+            if (connections_.isEmpty()) {
+              connections_ = other.connections_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureConnectionIdsIsMutable();
-              connectionIds_.addAll(other.connectionIds_);
+              ensureConnectionsIsMutable();
+              connections_.addAll(other.connections_);
             }
             onChanged();
           }
         } else {
-          if (!other.connectionIds_.isEmpty()) {
-            if (connectionIdsBuilder_.isEmpty()) {
-              connectionIdsBuilder_.dispose();
-              connectionIdsBuilder_ = null;
-              connectionIds_ = other.connectionIds_;
+          if (!other.connections_.isEmpty()) {
+            if (connectionsBuilder_.isEmpty()) {
+              connectionsBuilder_.dispose();
+              connectionsBuilder_ = null;
+              connections_ = other.connections_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              connectionIdsBuilder_ = 
+              connectionsBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getConnectionIdsFieldBuilder() : null;
+                   getConnectionsFieldBuilder() : null;
             } else {
-              connectionIdsBuilder_.addAllMessages(other.connectionIds_);
+              connectionsBuilder_.addAllMessages(other.connections_);
             }
           }
         }
@@ -43371,11 +45160,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionIdList parsedMessage = null;
+        context.ContextOuterClass.ConnectionList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionIdList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -43386,244 +45175,244 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_ =
+      private java.util.List<context.ContextOuterClass.Connection> connections_ =
         java.util.Collections.emptyList();
-      private void ensureConnectionIdsIsMutable() {
+      private void ensureConnectionsIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          connectionIds_ = new java.util.ArrayList<context.ContextOuterClass.ConnectionId>(connectionIds_);
+          connections_ = new java.util.ArrayList<context.ContextOuterClass.Connection>(connections_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdsBuilder_;
+          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> connectionsBuilder_;
 
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
-        if (connectionIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(connectionIds_);
+      public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
+        if (connectionsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(connections_);
         } else {
-          return connectionIdsBuilder_.getMessageList();
+          return connectionsBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public int getConnectionIdsCount() {
-        if (connectionIdsBuilder_ == null) {
-          return connectionIds_.size();
+      public int getConnectionsCount() {
+        if (connectionsBuilder_ == null) {
+          return connections_.size();
         } else {
-          return connectionIdsBuilder_.getCount();
+          return connectionsBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
-        if (connectionIdsBuilder_ == null) {
-          return connectionIds_.get(index);
+      public context.ContextOuterClass.Connection getConnections(int index) {
+        if (connectionsBuilder_ == null) {
+          return connections_.get(index);
         } else {
-          return connectionIdsBuilder_.getMessage(index);
+          return connectionsBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder setConnectionIds(
-          int index, context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdsBuilder_ == null) {
+      public Builder setConnections(
+          int index, context.ContextOuterClass.Connection value) {
+        if (connectionsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureConnectionIdsIsMutable();
-          connectionIds_.set(index, value);
+          ensureConnectionsIsMutable();
+          connections_.set(index, value);
           onChanged();
         } else {
-          connectionIdsBuilder_.setMessage(index, value);
+          connectionsBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder setConnectionIds(
-          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          connectionIds_.set(index, builderForValue.build());
+      public Builder setConnections(
+          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.set(index, builderForValue.build());
           onChanged();
         } else {
-          connectionIdsBuilder_.setMessage(index, builderForValue.build());
+          connectionsBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder addConnectionIds(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdsBuilder_ == null) {
+      public Builder addConnections(context.ContextOuterClass.Connection value) {
+        if (connectionsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureConnectionIdsIsMutable();
-          connectionIds_.add(value);
+          ensureConnectionsIsMutable();
+          connections_.add(value);
           onChanged();
         } else {
-          connectionIdsBuilder_.addMessage(value);
+          connectionsBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
-       */
-      public Builder addConnectionIds(
-          int index, context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdsBuilder_ == null) {
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public Builder addConnections(
+          int index, context.ContextOuterClass.Connection value) {
+        if (connectionsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureConnectionIdsIsMutable();
-          connectionIds_.add(index, value);
+          ensureConnectionsIsMutable();
+          connections_.add(index, value);
           onChanged();
         } else {
-          connectionIdsBuilder_.addMessage(index, value);
+          connectionsBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder addConnectionIds(
-          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          connectionIds_.add(builderForValue.build());
+      public Builder addConnections(
+          context.ContextOuterClass.Connection.Builder builderForValue) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.add(builderForValue.build());
           onChanged();
         } else {
-          connectionIdsBuilder_.addMessage(builderForValue.build());
+          connectionsBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder addConnectionIds(
-          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          connectionIds_.add(index, builderForValue.build());
+      public Builder addConnections(
+          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.add(index, builderForValue.build());
           onChanged();
         } else {
-          connectionIdsBuilder_.addMessage(index, builderForValue.build());
+          connectionsBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder addAllConnectionIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.ConnectionId> values) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
+      public Builder addAllConnections(
+          java.lang.Iterable<? extends context.ContextOuterClass.Connection> values) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, connectionIds_);
+              values, connections_);
           onChanged();
         } else {
-          connectionIdsBuilder_.addAllMessages(values);
+          connectionsBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder clearConnectionIds() {
-        if (connectionIdsBuilder_ == null) {
-          connectionIds_ = java.util.Collections.emptyList();
+      public Builder clearConnections() {
+        if (connectionsBuilder_ == null) {
+          connections_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          connectionIdsBuilder_.clear();
+          connectionsBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder removeConnectionIds(int index) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          connectionIds_.remove(index);
+      public Builder removeConnections(int index) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.remove(index);
           onChanged();
         } else {
-          connectionIdsBuilder_.remove(index);
+          connectionsBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdsBuilder(
+      public context.ContextOuterClass.Connection.Builder getConnectionsBuilder(
           int index) {
-        return getConnectionIdsFieldBuilder().getBuilder(index);
+        return getConnectionsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+      public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
           int index) {
-        if (connectionIdsBuilder_ == null) {
-          return connectionIds_.get(index);  } else {
-          return connectionIdsBuilder_.getMessageOrBuilder(index);
+        if (connectionsBuilder_ == null) {
+          return connections_.get(index);  } else {
+          return connectionsBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
-           getConnectionIdsOrBuilderList() {
-        if (connectionIdsBuilder_ != null) {
-          return connectionIdsBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
+           getConnectionsOrBuilderList() {
+        if (connectionsBuilder_ != null) {
+          return connectionsBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(connectionIds_);
+          return java.util.Collections.unmodifiableList(connections_);
         }
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder() {
-        return getConnectionIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.ConnectionId.getDefaultInstance());
+      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder() {
+        return getConnectionsFieldBuilder().addBuilder(
+            context.ContextOuterClass.Connection.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder(
+      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder(
           int index) {
-        return getConnectionIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ConnectionId.getDefaultInstance());
+        return getConnectionsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Connection.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.ConnectionId.Builder> 
-           getConnectionIdsBuilderList() {
-        return getConnectionIdsFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.Connection.Builder> 
+           getConnectionsBuilderList() {
+        return getConnectionsFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
-          getConnectionIdsFieldBuilder() {
-        if (connectionIdsBuilder_ == null) {
-          connectionIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
-                  connectionIds_,
+          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> 
+          getConnectionsFieldBuilder() {
+        if (connectionsBuilder_ == null) {
+          connectionsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder>(
+                  connections_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          connectionIds_ = null;
+          connections_ = null;
         }
-        return connectionIdsBuilder_;
+        return connectionsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -43638,95 +45427,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionIdList)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionIdList)
-    private static final context.ContextOuterClass.ConnectionIdList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionList)
+    private static final context.ContextOuterClass.ConnectionList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionIdList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionList();
     }
 
-    public static context.ContextOuterClass.ConnectionIdList getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionIdList>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionIdList>() {
+    private static final com.google.protobuf.Parser<ConnectionList>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionList>() {
       @java.lang.Override
-      public ConnectionIdList parsePartialFrom(
+      public ConnectionList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionIdList(input, extensionRegistry);
+        return new ConnectionList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionIdList> parser() {
+    public static com.google.protobuf.Parser<ConnectionList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionIdList> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionList)
+  public interface ConnectionEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionEvent)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
-    java.util.List<context.ContextOuterClass.Connection> 
-        getConnectionsList();
+    boolean hasEvent();
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
-    context.ContextOuterClass.Connection getConnections(int index);
+    context.ContextOuterClass.Event getEvent();
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.Event event = 1;</code>
      */
-    int getConnectionsCount();
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     * @return Whether the connectionId field is set.
      */
-    java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
-        getConnectionsOrBuilderList();
+    boolean hasConnectionId();
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     * @return The connectionId.
      */
-    context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
-        int index);
+    context.ContextOuterClass.ConnectionId getConnectionId();
+    /**
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     */
+    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
   }
   /**
-   * Protobuf type {@code context.ConnectionList}
+   * Protobuf type {@code context.ConnectionEvent}
    */
-  public static final class ConnectionList extends
+  public static final class ConnectionEvent extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionList)
-      ConnectionListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionEvent)
+      ConnectionEventOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionList.newBuilder() to construct.
-    private ConnectionList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionEvent.newBuilder() to construct.
+    private ConnectionEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionList() {
-      connections_ = java.util.Collections.emptyList();
+    private ConnectionEvent() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionList();
+      return new ConnectionEvent();
     }
 
     @java.lang.Override
@@ -43734,7 +45528,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionList(
+    private ConnectionEvent(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -43742,7 +45536,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -43754,12 +45547,29 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                connections_ = new java.util.ArrayList<context.ContextOuterClass.Connection>();
-                mutable_bitField0_ |= 0x00000001;
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
               }
-              connections_.add(
-                  input.readMessage(context.ContextOuterClass.Connection.parser(), extensionRegistry));
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.ConnectionId.Builder subBuilder = null;
+              if (connectionId_ != null) {
+                subBuilder = connectionId_.toBuilder();
+              }
+              connectionId_ = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(connectionId_);
+                connectionId_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -43777,64 +45587,73 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          connections_ = java.util.Collections.unmodifiableList(connections_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionEvent_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
+              context.ContextOuterClass.ConnectionEvent.class, context.ContextOuterClass.ConnectionEvent.Builder.class);
     }
 
-    public static final int CONNECTIONS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.Connection> connections_;
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
-      return connections_;
+    public boolean hasEvent() {
+      return event_ != null;
     }
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
-        getConnectionsOrBuilderList() {
-      return connections_;
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
     }
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.Event event = 1;</code>
      */
     @java.lang.Override
-    public int getConnectionsCount() {
-      return connections_.size();
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
     }
+
+    public static final int CONNECTION_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ConnectionId connectionId_;
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     * @return Whether the connectionId field is set.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Connection getConnections(int index) {
-      return connections_.get(index);
+    public boolean hasConnectionId() {
+      return connectionId_ != null;
     }
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     * @return The connectionId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
-        int index) {
-      return connections_.get(index);
+    public context.ContextOuterClass.ConnectionId getConnectionId() {
+      return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+    }
+    /**
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+      return getConnectionId();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -43851,8 +45670,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < connections_.size(); i++) {
-        output.writeMessage(1, connections_.get(i));
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
+      }
+      if (connectionId_ != null) {
+        output.writeMessage(2, getConnectionId());
       }
       unknownFields.writeTo(output);
     }
@@ -43863,9 +45685,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < connections_.size(); i++) {
+      if (event_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, connections_.get(i));
+          .computeMessageSize(1, getEvent());
+      }
+      if (connectionId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getConnectionId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -43877,13 +45703,21 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionList)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionEvent)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionList other = (context.ContextOuterClass.ConnectionList) obj;
+      context.ContextOuterClass.ConnectionEvent other = (context.ContextOuterClass.ConnectionEvent) obj;
 
-      if (!getConnectionsList()
-          .equals(other.getConnectionsList())) return false;
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
+      }
+      if (hasConnectionId() != other.hasConnectionId()) return false;
+      if (hasConnectionId()) {
+        if (!getConnectionId()
+            .equals(other.getConnectionId())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -43895,78 +45729,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getConnectionsCount() > 0) {
-        hash = (37 * hash) + CONNECTIONS_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionsList().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
+      }
+      if (hasConnectionId()) {
+        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionId().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionEvent parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionList parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -43979,7 +45817,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionEvent prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -43995,26 +45833,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionList}
+     * Protobuf type {@code context.ConnectionEvent}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionList)
-        context.ContextOuterClass.ConnectionListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionEvent)
+        context.ContextOuterClass.ConnectionEventOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionEvent_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
+                context.ContextOuterClass.ConnectionEvent.class, context.ContextOuterClass.ConnectionEvent.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionList.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionEvent.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -44027,17 +45865,22 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getConnectionsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (connectionsBuilder_ == null) {
-          connections_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (eventBuilder_ == null) {
+          event_ = null;
         } else {
-          connectionsBuilder_.clear();
+          event_ = null;
+          eventBuilder_ = null;
+        }
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
+        } else {
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
         }
         return this;
       }
@@ -44045,17 +45888,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionList.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionEvent.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionList build() {
-        context.ContextOuterClass.ConnectionList result = buildPartial();
+      public context.ContextOuterClass.ConnectionEvent build() {
+        context.ContextOuterClass.ConnectionEvent result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -44063,17 +45906,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionList buildPartial() {
-        context.ContextOuterClass.ConnectionList result = new context.ContextOuterClass.ConnectionList(this);
-        int from_bitField0_ = bitField0_;
-        if (connectionsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            connections_ = java.util.Collections.unmodifiableList(connections_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.connections_ = connections_;
+      public context.ContextOuterClass.ConnectionEvent buildPartial() {
+        context.ContextOuterClass.ConnectionEvent result = new context.ContextOuterClass.ConnectionEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
         } else {
-          result.connections_ = connectionsBuilder_.build();
+          result.event_ = eventBuilder_.build();
+        }
+        if (connectionIdBuilder_ == null) {
+          result.connectionId_ = connectionId_;
+        } else {
+          result.connectionId_ = connectionIdBuilder_.build();
         }
         onBuilt();
         return result;
@@ -44113,41 +45956,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionList) {
-          return mergeFrom((context.ContextOuterClass.ConnectionList)other);
+        if (other instanceof context.ContextOuterClass.ConnectionEvent) {
+          return mergeFrom((context.ContextOuterClass.ConnectionEvent)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionList other) {
-        if (other == context.ContextOuterClass.ConnectionList.getDefaultInstance()) return this;
-        if (connectionsBuilder_ == null) {
-          if (!other.connections_.isEmpty()) {
-            if (connections_.isEmpty()) {
-              connections_ = other.connections_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureConnectionsIsMutable();
-              connections_.addAll(other.connections_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.connections_.isEmpty()) {
-            if (connectionsBuilder_.isEmpty()) {
-              connectionsBuilder_.dispose();
-              connectionsBuilder_ = null;
-              connections_ = other.connections_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              connectionsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getConnectionsFieldBuilder() : null;
-            } else {
-              connectionsBuilder_.addAllMessages(other.connections_);
-            }
-          }
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionEvent other) {
+        if (other == context.ContextOuterClass.ConnectionEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
+        }
+        if (other.hasConnectionId()) {
+          mergeConnectionId(other.getConnectionId());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -44164,11 +45987,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionList parsedMessage = null;
+        context.ContextOuterClass.ConnectionEvent parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionEvent) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -44177,246 +46000,243 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
-
-      private java.util.List<context.ContextOuterClass.Connection> connections_ =
-        java.util.Collections.emptyList();
-      private void ensureConnectionsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          connections_ = new java.util.ArrayList<context.ContextOuterClass.Connection>(connections_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> connectionsBuilder_;
 
+      private context.ContextOuterClass.Event event_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
-       */
-      public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
-        if (connectionsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(connections_);
-        } else {
-          return connectionsBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
        */
-      public int getConnectionsCount() {
-        if (connectionsBuilder_ == null) {
-          return connections_.size();
-        } else {
-          return connectionsBuilder_.getCount();
-        }
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
        */
-      public context.ContextOuterClass.Connection getConnections(int index) {
-        if (connectionsBuilder_ == null) {
-          return connections_.get(index);
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         } else {
-          return connectionsBuilder_.getMessage(index);
+          return eventBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setConnections(
-          int index, context.ContextOuterClass.Connection value) {
-        if (connectionsBuilder_ == null) {
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureConnectionsIsMutable();
-          connections_.set(index, value);
+          event_ = value;
           onChanged();
         } else {
-          connectionsBuilder_.setMessage(index, value);
+          eventBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setConnections(
-          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          connections_.set(index, builderForValue.build());
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
           onChanged();
         } else {
-          connectionsBuilder_.setMessage(index, builderForValue.build());
+          eventBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addConnections(context.ContextOuterClass.Connection value) {
-        if (connectionsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (event_ != null) {
+            event_ =
+              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+          } else {
+            event_ = value;
           }
-          ensureConnectionsIsMutable();
-          connections_.add(value);
           onChanged();
         } else {
-          connectionsBuilder_.addMessage(value);
+          eventBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addConnections(
-          int index, context.ContextOuterClass.Connection value) {
-        if (connectionsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConnectionsIsMutable();
-          connections_.add(index, value);
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
           onChanged();
         } else {
-          connectionsBuilder_.addMessage(index, value);
+          event_ = null;
+          eventBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addConnections(
-          context.ContextOuterClass.Connection.Builder builderForValue) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          connections_.add(builderForValue.build());
-          onChanged();
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+        
+        onChanged();
+        return getEventFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
         } else {
-          connectionsBuilder_.addMessage(builderForValue.build());
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addConnections(
-          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          connections_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          connectionsBuilder_.addMessage(index, builderForValue.build());
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
+          getEventFieldBuilder() {
+        if (eventBuilder_ == null) {
+          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
+                  getEvent(),
+                  getParentForChildren(),
+                  isClean());
+          event_ = null;
         }
-        return this;
+        return eventBuilder_;
       }
+
+      private context.ContextOuterClass.ConnectionId connectionId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdBuilder_;
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
+       * @return Whether the connectionId field is set.
        */
-      public Builder addAllConnections(
-          java.lang.Iterable<? extends context.ContextOuterClass.Connection> values) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, connections_);
-          onChanged();
+      public boolean hasConnectionId() {
+        return connectionIdBuilder_ != null || connectionId_ != null;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 2;</code>
+       * @return The connectionId.
+       */
+      public context.ContextOuterClass.ConnectionId getConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
         } else {
-          connectionsBuilder_.addAllMessages(values);
+          return connectionIdBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public Builder clearConnections() {
-        if (connectionsBuilder_ == null) {
-          connections_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder setConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          connectionId_ = value;
           onChanged();
         } else {
-          connectionsBuilder_.clear();
+          connectionIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public Builder removeConnections(int index) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          connections_.remove(index);
+      public Builder setConnectionId(
+          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = builderForValue.build();
           onChanged();
         } else {
-          connectionsBuilder_.remove(index);
+          connectionIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
-       */
-      public context.ContextOuterClass.Connection.Builder getConnectionsBuilder(
-          int index) {
-        return getConnectionsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
-          int index) {
-        if (connectionsBuilder_ == null) {
-          return connections_.get(index);  } else {
-          return connectionsBuilder_.getMessageOrBuilder(index);
+      public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
+          if (connectionId_ != null) {
+            connectionId_ =
+              context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
+          } else {
+            connectionId_ = value;
+          }
+          onChanged();
+        } else {
+          connectionIdBuilder_.mergeFrom(value);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
-           getConnectionsOrBuilderList() {
-        if (connectionsBuilder_ != null) {
-          return connectionsBuilder_.getMessageOrBuilderList();
+      public Builder clearConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(connections_);
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder() {
-        return getConnectionsFieldBuilder().addBuilder(
-            context.ContextOuterClass.Connection.getDefaultInstance());
+      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
+        
+        onChanged();
+        return getConnectionIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder(
-          int index) {
-        return getConnectionsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Connection.getDefaultInstance());
+      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+        if (connectionIdBuilder_ != null) {
+          return connectionIdBuilder_.getMessageOrBuilder();
+        } else {
+          return connectionId_ == null ?
+              context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+        }
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public java.util.List<context.ContextOuterClass.Connection.Builder> 
-           getConnectionsBuilderList() {
-        return getConnectionsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> 
-          getConnectionsFieldBuilder() {
-        if (connectionsBuilder_ == null) {
-          connectionsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder>(
-                  connections_,
-                  ((bitField0_ & 0x00000001) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
+          getConnectionIdFieldBuilder() {
+        if (connectionIdBuilder_ == null) {
+          connectionIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
+                  getConnectionId(),
                   getParentForChildren(),
                   isClean());
-          connections_ = null;
+          connectionId_ = null;
         }
-        return connectionsBuilder_;
+        return connectionIdBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -44431,100 +46251,119 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionList)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionEvent)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionList)
-    private static final context.ContextOuterClass.ConnectionList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionEvent)
+    private static final context.ContextOuterClass.ConnectionEvent DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionEvent();
     }
 
-    public static context.ContextOuterClass.ConnectionList getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionEvent getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionList>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionList>() {
+    private static final com.google.protobuf.Parser<ConnectionEvent>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionEvent>() {
       @java.lang.Override
-      public ConnectionList parsePartialFrom(
+      public ConnectionEvent parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionList(input, extensionRegistry);
+        return new ConnectionEvent(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionList> parser() {
+    public static com.google.protobuf.Parser<ConnectionEvent> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionList> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionEvent> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionEvent getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionEventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionEvent)
+  public interface EndPointIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.EndPointId)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return Whether the topologyId field is set.
      */
-    boolean hasEvent();
+    boolean hasTopologyId();
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return The topologyId.
      */
-    context.ContextOuterClass.Event getEvent();
+    context.ContextOuterClass.TopologyId getTopologyId();
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>.context.TopologyId topology_id = 1;</code>
      */
-    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
 
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
-     * @return Whether the connectionId field is set.
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return Whether the deviceId field is set.
      */
-    boolean hasConnectionId();
+    boolean hasDeviceId();
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
-     * @return The connectionId.
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return The deviceId.
      */
-    context.ContextOuterClass.ConnectionId getConnectionId();
+    context.ContextOuterClass.DeviceId getDeviceId();
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
+     * <code>.context.DeviceId device_id = 2;</code>
      */
-    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
+
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * @return Whether the endpointUuid field is set.
+     */
+    boolean hasEndpointUuid();
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * @return The endpointUuid.
+     */
+    context.ContextOuterClass.Uuid getEndpointUuid();
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder();
   }
   /**
-   * Protobuf type {@code context.ConnectionEvent}
+   * <pre>
+   * ----- Endpoint ------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.EndPointId}
    */
-  public static final class ConnectionEvent extends
+  public static final class EndPointId extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionEvent)
-      ConnectionEventOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.EndPointId)
+      EndPointIdOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionEvent.newBuilder() to construct.
-    private ConnectionEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use EndPointId.newBuilder() to construct.
+    private EndPointId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionEvent() {
+    private EndPointId() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionEvent();
+      return new EndPointId();
     }
 
     @java.lang.Override
@@ -44532,7 +46371,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionEvent(
+    private EndPointId(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -44551,27 +46390,40 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Event.Builder subBuilder = null;
-              if (event_ != null) {
-                subBuilder = event_.toBuilder();
+              context.ContextOuterClass.TopologyId.Builder subBuilder = null;
+              if (topologyId_ != null) {
+                subBuilder = topologyId_.toBuilder();
               }
-              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              topologyId_ = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(event_);
-                event_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(topologyId_);
+                topologyId_ = subBuilder.buildPartial();
               }
 
               break;
             }
             case 18: {
-              context.ContextOuterClass.ConnectionId.Builder subBuilder = null;
-              if (connectionId_ != null) {
-                subBuilder = connectionId_.toBuilder();
+              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
+              if (deviceId_ != null) {
+                subBuilder = deviceId_.toBuilder();
               }
-              connectionId_ = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
+              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(connectionId_);
-                connectionId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(deviceId_);
+                deviceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 26: {
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (endpointUuid_ != null) {
+                subBuilder = endpointUuid_.toBuilder();
+              }
+              endpointUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endpointUuid_);
+                endpointUuid_ = subBuilder.buildPartial();
               }
 
               break;
@@ -44597,67 +46449,93 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
+      return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionEvent_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_EndPointId_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionEvent.class, context.ContextOuterClass.ConnectionEvent.Builder.class);
+              context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
     }
 
-    public static final int EVENT_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Event event_;
+    public static final int TOPOLOGY_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.TopologyId topologyId_;
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return Whether the topologyId field is set.
      */
     @java.lang.Override
-    public boolean hasEvent() {
-      return event_ != null;
+    public boolean hasTopologyId() {
+      return topologyId_ != null;
     }
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return The topologyId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Event getEvent() {
-      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    public context.ContextOuterClass.TopologyId getTopologyId() {
+      return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
     }
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>.context.TopologyId topology_id = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-      return getEvent();
+    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+      return getTopologyId();
     }
 
-    public static final int CONNECTION_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.ConnectionId connectionId_;
+    public static final int DEVICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.DeviceId deviceId_;
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
-     * @return Whether the connectionId field is set.
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return Whether the deviceId field is set.
      */
     @java.lang.Override
-    public boolean hasConnectionId() {
-      return connectionId_ != null;
+    public boolean hasDeviceId() {
+      return deviceId_ != null;
     }
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
-     * @return The connectionId.
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return The deviceId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionId getConnectionId() {
-      return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+    public context.ContextOuterClass.DeviceId getDeviceId() {
+      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
     }
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
+     * <code>.context.DeviceId device_id = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
-      return getConnectionId();
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+      return getDeviceId();
+    }
+
+    public static final int ENDPOINT_UUID_FIELD_NUMBER = 3;
+    private context.ContextOuterClass.Uuid endpointUuid_;
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * @return Whether the endpointUuid field is set.
+     */
+    @java.lang.Override
+    public boolean hasEndpointUuid() {
+      return endpointUuid_ != null;
+    }
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * @return The endpointUuid.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getEndpointUuid() {
+      return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
+    }
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
+      return getEndpointUuid();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -44674,11 +46552,14 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (event_ != null) {
-        output.writeMessage(1, getEvent());
+      if (topologyId_ != null) {
+        output.writeMessage(1, getTopologyId());
       }
-      if (connectionId_ != null) {
-        output.writeMessage(2, getConnectionId());
+      if (deviceId_ != null) {
+        output.writeMessage(2, getDeviceId());
+      }
+      if (endpointUuid_ != null) {
+        output.writeMessage(3, getEndpointUuid());
       }
       unknownFields.writeTo(output);
     }
@@ -44689,13 +46570,17 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (event_ != null) {
+      if (topologyId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEvent());
+          .computeMessageSize(1, getTopologyId());
       }
-      if (connectionId_ != null) {
+      if (deviceId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getConnectionId());
+          .computeMessageSize(2, getDeviceId());
+      }
+      if (endpointUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, getEndpointUuid());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -44707,20 +46592,25 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionEvent)) {
+      if (!(obj instanceof context.ContextOuterClass.EndPointId)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionEvent other = (context.ContextOuterClass.ConnectionEvent) obj;
-
-      if (hasEvent() != other.hasEvent()) return false;
-      if (hasEvent()) {
-        if (!getEvent()
-            .equals(other.getEvent())) return false;
+      context.ContextOuterClass.EndPointId other = (context.ContextOuterClass.EndPointId) obj;
+
+      if (hasTopologyId() != other.hasTopologyId()) return false;
+      if (hasTopologyId()) {
+        if (!getTopologyId()
+            .equals(other.getTopologyId())) return false;
+      }
+      if (hasDeviceId() != other.hasDeviceId()) return false;
+      if (hasDeviceId()) {
+        if (!getDeviceId()
+            .equals(other.getDeviceId())) return false;
       }
-      if (hasConnectionId() != other.hasConnectionId()) return false;
-      if (hasConnectionId()) {
-        if (!getConnectionId()
-            .equals(other.getConnectionId())) return false;
+      if (hasEndpointUuid() != other.hasEndpointUuid()) return false;
+      if (hasEndpointUuid()) {
+        if (!getEndpointUuid()
+            .equals(other.getEndpointUuid())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -44733,82 +46623,86 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasEvent()) {
-        hash = (37 * hash) + EVENT_FIELD_NUMBER;
-        hash = (53 * hash) + getEvent().hashCode();
+      if (hasTopologyId()) {
+        hash = (37 * hash) + TOPOLOGY_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologyId().hashCode();
       }
-      if (hasConnectionId()) {
-        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionId().hashCode();
+      if (hasDeviceId()) {
+        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceId().hashCode();
+      }
+      if (hasEndpointUuid()) {
+        hash = (37 * hash) + ENDPOINT_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointUuid().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(byte[] data)
+    public static context.ContextOuterClass.EndPointId parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.EndPointId parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.EndPointId parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseDelimitedFrom(
+    public static context.ContextOuterClass.EndPointId parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -44821,7 +46715,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionEvent prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.EndPointId prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -44837,26 +46731,30 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionEvent}
+     * <pre>
+     * ----- Endpoint ------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.EndPointId}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionEvent)
-        context.ContextOuterClass.ConnectionEventOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.EndPointId)
+        context.ContextOuterClass.EndPointIdOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionEvent_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_EndPointId_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionEvent.class, context.ContextOuterClass.ConnectionEvent.Builder.class);
+                context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionEvent.newBuilder()
+      // Construct using context.ContextOuterClass.EndPointId.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -44874,17 +46772,23 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (eventBuilder_ == null) {
-          event_ = null;
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
         }
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = null;
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
         } else {
-          connectionId_ = null;
-          connectionIdBuilder_ = null;
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+        if (endpointUuidBuilder_ == null) {
+          endpointUuid_ = null;
+        } else {
+          endpointUuid_ = null;
+          endpointUuidBuilder_ = null;
         }
         return this;
       }
@@ -44892,17 +46796,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionEvent getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionEvent.getDefaultInstance();
+      public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
+        return context.ContextOuterClass.EndPointId.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionEvent build() {
-        context.ContextOuterClass.ConnectionEvent result = buildPartial();
+      public context.ContextOuterClass.EndPointId build() {
+        context.ContextOuterClass.EndPointId result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -44910,17 +46814,22 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionEvent buildPartial() {
-        context.ContextOuterClass.ConnectionEvent result = new context.ContextOuterClass.ConnectionEvent(this);
-        if (eventBuilder_ == null) {
-          result.event_ = event_;
+      public context.ContextOuterClass.EndPointId buildPartial() {
+        context.ContextOuterClass.EndPointId result = new context.ContextOuterClass.EndPointId(this);
+        if (topologyIdBuilder_ == null) {
+          result.topologyId_ = topologyId_;
         } else {
-          result.event_ = eventBuilder_.build();
+          result.topologyId_ = topologyIdBuilder_.build();
         }
-        if (connectionIdBuilder_ == null) {
-          result.connectionId_ = connectionId_;
+        if (deviceIdBuilder_ == null) {
+          result.deviceId_ = deviceId_;
         } else {
-          result.connectionId_ = connectionIdBuilder_.build();
+          result.deviceId_ = deviceIdBuilder_.build();
+        }
+        if (endpointUuidBuilder_ == null) {
+          result.endpointUuid_ = endpointUuid_;
+        } else {
+          result.endpointUuid_ = endpointUuidBuilder_.build();
         }
         onBuilt();
         return result;
@@ -44960,287 +46869,409 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionEvent) {
-          return mergeFrom((context.ContextOuterClass.ConnectionEvent)other);
+        if (other instanceof context.ContextOuterClass.EndPointId) {
+          return mergeFrom((context.ContextOuterClass.EndPointId)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.EndPointId other) {
+        if (other == context.ContextOuterClass.EndPointId.getDefaultInstance()) return this;
+        if (other.hasTopologyId()) {
+          mergeTopologyId(other.getTopologyId());
+        }
+        if (other.hasDeviceId()) {
+          mergeDeviceId(other.getDeviceId());
+        }
+        if (other.hasEndpointUuid()) {
+          mergeEndpointUuid(other.getEndpointUuid());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.EndPointId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.EndPointId) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.TopologyId topologyId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdBuilder_;
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       * @return Whether the topologyId field is set.
+       */
+      public boolean hasTopologyId() {
+        return topologyIdBuilder_ != null || topologyId_ != null;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       * @return The topologyId.
+       */
+      public context.ContextOuterClass.TopologyId getTopologyId() {
+        if (topologyIdBuilder_ == null) {
+          return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+        } else {
+          return topologyIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder setTopologyId(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          topologyId_ = value;
+          onChanged();
+        } else {
+          topologyIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder setTopologyId(
+          context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = builderForValue.build();
+          onChanged();
+        } else {
+          topologyIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder mergeTopologyId(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdBuilder_ == null) {
+          if (topologyId_ != null) {
+            topologyId_ =
+              context.ContextOuterClass.TopologyId.newBuilder(topologyId_).mergeFrom(value).buildPartial();
+          } else {
+            topologyId_ = value;
+          }
+          onChanged();
+        } else {
+          topologyIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder clearTopologyId() {
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
+          onChanged();
         } else {
-          super.mergeFrom(other);
-          return this;
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
         }
-      }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionEvent other) {
-        if (other == context.ContextOuterClass.ConnectionEvent.getDefaultInstance()) return this;
-        if (other.hasEvent()) {
-          mergeEvent(other.getEvent());
-        }
-        if (other.hasConnectionId()) {
-          mergeConnectionId(other.getConnectionId());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
         return this;
       }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
+        
+        onChanged();
+        return getTopologyIdFieldBuilder().getBuilder();
       }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.ConnectionEvent parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionEvent) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+        if (topologyIdBuilder_ != null) {
+          return topologyIdBuilder_.getMessageOrBuilder();
+        } else {
+          return topologyId_ == null ?
+              context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
         }
-        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
+          getTopologyIdFieldBuilder() {
+        if (topologyIdBuilder_ == null) {
+          topologyIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
+                  getTopologyId(),
+                  getParentForChildren(),
+                  isClean());
+          topologyId_ = null;
+        }
+        return topologyIdBuilder_;
       }
 
-      private context.ContextOuterClass.Event event_;
+      private context.ContextOuterClass.DeviceId deviceId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return Whether the event field is set.
+       * <code>.context.DeviceId device_id = 2;</code>
+       * @return Whether the deviceId field is set.
        */
-      public boolean hasEvent() {
-        return eventBuilder_ != null || event_ != null;
+      public boolean hasDeviceId() {
+        return deviceIdBuilder_ != null || deviceId_ != null;
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return The event.
+       * <code>.context.DeviceId device_id = 2;</code>
+       * @return The deviceId.
        */
-      public context.ContextOuterClass.Event getEvent() {
-        if (eventBuilder_ == null) {
-          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+      public context.ContextOuterClass.DeviceId getDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
         } else {
-          return eventBuilder_.getMessage();
+          return deviceIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public Builder setEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
+      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          event_ = value;
+          deviceId_ = value;
           onChanged();
         } else {
-          eventBuilder_.setMessage(value);
+          deviceIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public Builder setEvent(
-          context.ContextOuterClass.Event.Builder builderForValue) {
-        if (eventBuilder_ == null) {
-          event_ = builderForValue.build();
+      public Builder setDeviceId(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = builderForValue.build();
           onChanged();
         } else {
-          eventBuilder_.setMessage(builderForValue.build());
+          deviceIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public Builder mergeEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
-          if (event_ != null) {
-            event_ =
-              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (deviceId_ != null) {
+            deviceId_ =
+              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
           } else {
-            event_ = value;
+            deviceId_ = value;
           }
           onChanged();
         } else {
-          eventBuilder_.mergeFrom(value);
+          deviceIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public Builder clearEvent() {
-        if (eventBuilder_ == null) {
-          event_ = null;
+      public Builder clearDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
           onChanged();
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
         
         onChanged();
-        return getEventFieldBuilder().getBuilder();
+        return getDeviceIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-        if (eventBuilder_ != null) {
-          return eventBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+        if (deviceIdBuilder_ != null) {
+          return deviceIdBuilder_.getMessageOrBuilder();
         } else {
-          return event_ == null ?
-              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+          return deviceId_ == null ?
+              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
-          getEventFieldBuilder() {
-        if (eventBuilder_ == null) {
-          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
-                  getEvent(),
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdFieldBuilder() {
+        if (deviceIdBuilder_ == null) {
+          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  getDeviceId(),
                   getParentForChildren(),
                   isClean());
-          event_ = null;
+          deviceId_ = null;
         }
-        return eventBuilder_;
+        return deviceIdBuilder_;
       }
 
-      private context.ContextOuterClass.ConnectionId connectionId_;
+      private context.ContextOuterClass.Uuid endpointUuid_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdBuilder_;
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> endpointUuidBuilder_;
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
-       * @return Whether the connectionId field is set.
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * @return Whether the endpointUuid field is set.
        */
-      public boolean hasConnectionId() {
-        return connectionIdBuilder_ != null || connectionId_ != null;
+      public boolean hasEndpointUuid() {
+        return endpointUuidBuilder_ != null || endpointUuid_ != null;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
-       * @return The connectionId.
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * @return The endpointUuid.
        */
-      public context.ContextOuterClass.ConnectionId getConnectionId() {
-        if (connectionIdBuilder_ == null) {
-          return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+      public context.ContextOuterClass.Uuid getEndpointUuid() {
+        if (endpointUuidBuilder_ == null) {
+          return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
         } else {
-          return connectionIdBuilder_.getMessage();
+          return endpointUuidBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public Builder setConnectionId(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdBuilder_ == null) {
+      public Builder setEndpointUuid(context.ContextOuterClass.Uuid value) {
+        if (endpointUuidBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          connectionId_ = value;
+          endpointUuid_ = value;
           onChanged();
         } else {
-          connectionIdBuilder_.setMessage(value);
+          endpointUuidBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public Builder setConnectionId(
-          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = builderForValue.build();
+      public Builder setEndpointUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (endpointUuidBuilder_ == null) {
+          endpointUuid_ = builderForValue.build();
           onChanged();
         } else {
-          connectionIdBuilder_.setMessage(builderForValue.build());
+          endpointUuidBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdBuilder_ == null) {
-          if (connectionId_ != null) {
-            connectionId_ =
-              context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
+      public Builder mergeEndpointUuid(context.ContextOuterClass.Uuid value) {
+        if (endpointUuidBuilder_ == null) {
+          if (endpointUuid_ != null) {
+            endpointUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(endpointUuid_).mergeFrom(value).buildPartial();
           } else {
-            connectionId_ = value;
+            endpointUuid_ = value;
           }
           onChanged();
         } else {
-          connectionIdBuilder_.mergeFrom(value);
+          endpointUuidBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public Builder clearConnectionId() {
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = null;
+      public Builder clearEndpointUuid() {
+        if (endpointUuidBuilder_ == null) {
+          endpointUuid_ = null;
           onChanged();
         } else {
-          connectionId_ = null;
-          connectionIdBuilder_ = null;
+          endpointUuid_ = null;
+          endpointUuidBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
+      public context.ContextOuterClass.Uuid.Builder getEndpointUuidBuilder() {
         
         onChanged();
-        return getConnectionIdFieldBuilder().getBuilder();
+        return getEndpointUuidFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
-        if (connectionIdBuilder_ != null) {
-          return connectionIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
+        if (endpointUuidBuilder_ != null) {
+          return endpointUuidBuilder_.getMessageOrBuilder();
         } else {
-          return connectionId_ == null ?
-              context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+          return endpointUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
         }
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
-          getConnectionIdFieldBuilder() {
-        if (connectionIdBuilder_ == null) {
-          connectionIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
-                  getConnectionId(),
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getEndpointUuidFieldBuilder() {
+        if (endpointUuidBuilder_ == null) {
+          endpointUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getEndpointUuid(),
                   getParentForChildren(),
                   isClean());
-          connectionId_ = null;
+          endpointUuid_ = null;
         }
-        return connectionIdBuilder_;
+        return endpointUuidBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -45255,119 +47286,143 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionEvent)
+      // @@protoc_insertion_point(builder_scope:context.EndPointId)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionEvent)
-    private static final context.ContextOuterClass.ConnectionEvent DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.EndPointId)
+    private static final context.ContextOuterClass.EndPointId DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionEvent();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPointId();
     }
 
-    public static context.ContextOuterClass.ConnectionEvent getDefaultInstance() {
+    public static context.ContextOuterClass.EndPointId getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionEvent>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionEvent>() {
+    private static final com.google.protobuf.Parser<EndPointId>
+        PARSER = new com.google.protobuf.AbstractParser<EndPointId>() {
       @java.lang.Override
-      public ConnectionEvent parsePartialFrom(
+      public EndPointId parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionEvent(input, extensionRegistry);
+        return new EndPointId(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionEvent> parser() {
+    public static com.google.protobuf.Parser<EndPointId> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionEvent> getParserForType() {
+    public com.google.protobuf.Parser<EndPointId> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionEvent getDefaultInstanceForType() {
+    public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface EndPointIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.EndPointId)
+  public interface EndPointOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.EndPoint)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return Whether the topologyId field is set.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
-    boolean hasTopologyId();
+    boolean hasEndpointId();
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return The topologyId.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
-    context.ContextOuterClass.TopologyId getTopologyId();
+    context.ContextOuterClass.EndPointId getEndpointId();
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
      */
-    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
 
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return Whether the deviceId field is set.
+     * <code>string endpoint_type = 2;</code>
+     * @return The endpointType.
      */
-    boolean hasDeviceId();
+    java.lang.String getEndpointType();
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return The deviceId.
+     * <code>string endpoint_type = 2;</code>
+     * @return The bytes for endpointType.
      */
-    context.ContextOuterClass.DeviceId getDeviceId();
+    com.google.protobuf.ByteString
+        getEndpointTypeBytes();
+
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return A list containing the kpiSampleTypes.
      */
-    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
+    java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList();
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return The count of kpiSampleTypes.
+     */
+    int getKpiSampleTypesCount();
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @param index The index of the element to return.
+     * @return The kpiSampleTypes at the given index.
+     */
+    kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index);
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
+     */
+    java.util.List<java.lang.Integer>
+    getKpiSampleTypesValueList();
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
+     */
+    int getKpiSampleTypesValue(int index);
 
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
-     * @return Whether the endpointUuid field is set.
+     * <code>.context.Location endpoint_location = 4;</code>
+     * @return Whether the endpointLocation field is set.
      */
-    boolean hasEndpointUuid();
+    boolean hasEndpointLocation();
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
-     * @return The endpointUuid.
+     * <code>.context.Location endpoint_location = 4;</code>
+     * @return The endpointLocation.
      */
-    context.ContextOuterClass.Uuid getEndpointUuid();
+    context.ContextOuterClass.Location getEndpointLocation();
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * <code>.context.Location endpoint_location = 4;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder();
+    context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder();
   }
   /**
-   * <pre>
-   * ----- Endpoint ------------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.EndPointId}
+   * Protobuf type {@code context.EndPoint}
    */
-  public static final class EndPointId extends
+  public static final class EndPoint extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.EndPointId)
-      EndPointIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.EndPoint)
+      EndPointOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use EndPointId.newBuilder() to construct.
-    private EndPointId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use EndPoint.newBuilder() to construct.
+    private EndPoint(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private EndPointId() {
+    private EndPoint() {
+      endpointType_ = "";
+      kpiSampleTypes_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new EndPointId();
+      return new EndPoint();
     }
 
     @java.lang.Override
@@ -45375,7 +47430,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private EndPointId(
+    private EndPoint(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -45383,6 +47438,7 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -45394,40 +47450,56 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.TopologyId.Builder subBuilder = null;
-              if (topologyId_ != null) {
-                subBuilder = topologyId_.toBuilder();
+              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
+              if (endpointId_ != null) {
+                subBuilder = endpointId_.toBuilder();
               }
-              topologyId_ = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
+              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(topologyId_);
-                topologyId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(endpointId_);
+                endpointId_ = subBuilder.buildPartial();
               }
 
               break;
             }
             case 18: {
-              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
-              if (deviceId_ != null) {
-                subBuilder = deviceId_.toBuilder();
-              }
-              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(deviceId_);
-                deviceId_ = subBuilder.buildPartial();
-              }
+              java.lang.String s = input.readStringRequireUtf8();
 
+              endpointType_ = s;
+              break;
+            }
+            case 24: {
+              int rawValue = input.readEnum();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              kpiSampleTypes_.add(rawValue);
               break;
             }
             case 26: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (endpointUuid_ != null) {
-                subBuilder = endpointUuid_.toBuilder();
+              int length = input.readRawVarint32();
+              int oldLimit = input.pushLimit(length);
+              while(input.getBytesUntilLimit() > 0) {
+                int rawValue = input.readEnum();
+                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                  kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>();
+                  mutable_bitField0_ |= 0x00000001;
+                }
+                kpiSampleTypes_.add(rawValue);
               }
-              endpointUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              input.popLimit(oldLimit);
+              break;
+            }
+            case 34: {
+              context.ContextOuterClass.Location.Builder subBuilder = null;
+              if (endpointLocation_ != null) {
+                subBuilder = endpointLocation_.toBuilder();
+              }
+              endpointLocation_ = input.readMessage(context.ContextOuterClass.Location.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(endpointUuid_);
-                endpointUuid_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(endpointLocation_);
+                endpointLocation_ = subBuilder.buildPartial();
               }
 
               break;
@@ -45447,99 +47519,172 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          kpiSampleTypes_ = java.util.Collections.unmodifiableList(kpiSampleTypes_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+      return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_EndPoint_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
+    }
+
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.EndPointId endpointId_;
+    /**
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
+     */
+    @java.lang.Override
+    public boolean hasEndpointId() {
+      return endpointId_ != null;
+    }
+    /**
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getEndpointId() {
+      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+    }
+    /**
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+      return getEndpointId();
     }
 
+    public static final int ENDPOINT_TYPE_FIELD_NUMBER = 2;
+    private volatile java.lang.Object endpointType_;
+    /**
+     * <code>string endpoint_type = 2;</code>
+     * @return The endpointType.
+     */
     @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_EndPointId_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
+    public java.lang.String getEndpointType() {
+      java.lang.Object ref = endpointType_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        endpointType_ = s;
+        return s;
+      }
     }
-
-    public static final int TOPOLOGY_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.TopologyId topologyId_;
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return Whether the topologyId field is set.
+     * <code>string endpoint_type = 2;</code>
+     * @return The bytes for endpointType.
      */
     @java.lang.Override
-    public boolean hasTopologyId() {
-      return topologyId_ != null;
+    public com.google.protobuf.ByteString
+        getEndpointTypeBytes() {
+      java.lang.Object ref = endpointType_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        endpointType_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
+
+    public static final int KPI_SAMPLE_TYPES_FIELD_NUMBER = 3;
+    private java.util.List<java.lang.Integer> kpiSampleTypes_;
+    private static final com.google.protobuf.Internal.ListAdapter.Converter<
+        java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType> kpiSampleTypes_converter_ =
+            new com.google.protobuf.Internal.ListAdapter.Converter<
+                java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>() {
+              public kpi_sample_types.KpiSampleTypes.KpiSampleType convert(java.lang.Integer from) {
+                @SuppressWarnings("deprecation")
+                kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(from);
+                return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
+              }
+            };
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return The topologyId.
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return A list containing the kpiSampleTypes.
      */
     @java.lang.Override
-    public context.ContextOuterClass.TopologyId getTopologyId() {
-      return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+    public java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList() {
+      return new com.google.protobuf.Internal.ListAdapter<
+          java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>(kpiSampleTypes_, kpiSampleTypes_converter_);
     }
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return The count of kpiSampleTypes.
      */
     @java.lang.Override
-    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
-      return getTopologyId();
+    public int getKpiSampleTypesCount() {
+      return kpiSampleTypes_.size();
     }
-
-    public static final int DEVICE_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.DeviceId deviceId_;
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return Whether the deviceId field is set.
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @param index The index of the element to return.
+     * @return The kpiSampleTypes at the given index.
      */
     @java.lang.Override
-    public boolean hasDeviceId() {
-      return deviceId_ != null;
+    public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index) {
+      return kpiSampleTypes_converter_.convert(kpiSampleTypes_.get(index));
     }
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return The deviceId.
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
      */
     @java.lang.Override
-    public context.ContextOuterClass.DeviceId getDeviceId() {
-      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+    public java.util.List<java.lang.Integer>
+    getKpiSampleTypesValueList() {
+      return kpiSampleTypes_;
     }
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
      */
     @java.lang.Override
-    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-      return getDeviceId();
+    public int getKpiSampleTypesValue(int index) {
+      return kpiSampleTypes_.get(index);
     }
+    private int kpiSampleTypesMemoizedSerializedSize;
 
-    public static final int ENDPOINT_UUID_FIELD_NUMBER = 3;
-    private context.ContextOuterClass.Uuid endpointUuid_;
+    public static final int ENDPOINT_LOCATION_FIELD_NUMBER = 4;
+    private context.ContextOuterClass.Location endpointLocation_;
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
-     * @return Whether the endpointUuid field is set.
+     * <code>.context.Location endpoint_location = 4;</code>
+     * @return Whether the endpointLocation field is set.
      */
     @java.lang.Override
-    public boolean hasEndpointUuid() {
-      return endpointUuid_ != null;
+    public boolean hasEndpointLocation() {
+      return endpointLocation_ != null;
     }
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
-     * @return The endpointUuid.
+     * <code>.context.Location endpoint_location = 4;</code>
+     * @return The endpointLocation.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getEndpointUuid() {
-      return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
+    public context.ContextOuterClass.Location getEndpointLocation() {
+      return endpointLocation_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
     }
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * <code>.context.Location endpoint_location = 4;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
-      return getEndpointUuid();
+    public context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder() {
+      return getEndpointLocation();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -45556,14 +47701,22 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (topologyId_ != null) {
-        output.writeMessage(1, getTopologyId());
+      getSerializedSize();
+      if (endpointId_ != null) {
+        output.writeMessage(1, getEndpointId());
       }
-      if (deviceId_ != null) {
-        output.writeMessage(2, getDeviceId());
+      if (!getEndpointTypeBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, endpointType_);
       }
-      if (endpointUuid_ != null) {
-        output.writeMessage(3, getEndpointUuid());
+      if (getKpiSampleTypesList().size() > 0) {
+        output.writeUInt32NoTag(26);
+        output.writeUInt32NoTag(kpiSampleTypesMemoizedSerializedSize);
+      }
+      for (int i = 0; i < kpiSampleTypes_.size(); i++) {
+        output.writeEnumNoTag(kpiSampleTypes_.get(i));
+      }
+      if (endpointLocation_ != null) {
+        output.writeMessage(4, getEndpointLocation());
       }
       unknownFields.writeTo(output);
     }
@@ -45574,17 +47727,28 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (topologyId_ != null) {
+      if (endpointId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getTopologyId());
+          .computeMessageSize(1, getEndpointId());
       }
-      if (deviceId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getDeviceId());
+      if (!getEndpointTypeBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, endpointType_);
       }
-      if (endpointUuid_ != null) {
+      {
+        int dataSize = 0;
+        for (int i = 0; i < kpiSampleTypes_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeEnumSizeNoTag(kpiSampleTypes_.get(i));
+        }
+        size += dataSize;
+        if (!getKpiSampleTypesList().isEmpty()) {  size += 1;
+          size += com.google.protobuf.CodedOutputStream
+            .computeUInt32SizeNoTag(dataSize);
+        }kpiSampleTypesMemoizedSerializedSize = dataSize;
+      }
+      if (endpointLocation_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, getEndpointUuid());
+          .computeMessageSize(4, getEndpointLocation());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -45596,25 +47760,23 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.EndPointId)) {
+      if (!(obj instanceof context.ContextOuterClass.EndPoint)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.EndPointId other = (context.ContextOuterClass.EndPointId) obj;
+      context.ContextOuterClass.EndPoint other = (context.ContextOuterClass.EndPoint) obj;
 
-      if (hasTopologyId() != other.hasTopologyId()) return false;
-      if (hasTopologyId()) {
-        if (!getTopologyId()
-            .equals(other.getTopologyId())) return false;
-      }
-      if (hasDeviceId() != other.hasDeviceId()) return false;
-      if (hasDeviceId()) {
-        if (!getDeviceId()
-            .equals(other.getDeviceId())) return false;
+      if (hasEndpointId() != other.hasEndpointId()) return false;
+      if (hasEndpointId()) {
+        if (!getEndpointId()
+            .equals(other.getEndpointId())) return false;
       }
-      if (hasEndpointUuid() != other.hasEndpointUuid()) return false;
-      if (hasEndpointUuid()) {
-        if (!getEndpointUuid()
-            .equals(other.getEndpointUuid())) return false;
+      if (!getEndpointType()
+          .equals(other.getEndpointType())) return false;
+      if (!kpiSampleTypes_.equals(other.kpiSampleTypes_)) return false;
+      if (hasEndpointLocation() != other.hasEndpointLocation()) return false;
+      if (hasEndpointLocation()) {
+        if (!getEndpointLocation()
+            .equals(other.getEndpointLocation())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -45627,86 +47789,88 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasTopologyId()) {
-        hash = (37 * hash) + TOPOLOGY_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getTopologyId().hashCode();
+      if (hasEndpointId()) {
+        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointId().hashCode();
       }
-      if (hasDeviceId()) {
-        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceId().hashCode();
+      hash = (37 * hash) + ENDPOINT_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + getEndpointType().hashCode();
+      if (getKpiSampleTypesCount() > 0) {
+        hash = (37 * hash) + KPI_SAMPLE_TYPES_FIELD_NUMBER;
+        hash = (53 * hash) + kpiSampleTypes_.hashCode();
       }
-      if (hasEndpointUuid()) {
-        hash = (37 * hash) + ENDPOINT_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getEndpointUuid().hashCode();
+      if (hasEndpointLocation()) {
+        hash = (37 * hash) + ENDPOINT_LOCATION_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointLocation().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(byte[] data)
+    public static context.ContextOuterClass.EndPoint parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.EndPoint parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.EndPoint parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPointId parseDelimitedFrom(
+    public static context.ContextOuterClass.EndPoint parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -45719,7 +47883,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.EndPointId prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.EndPoint prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -45735,30 +47899,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Endpoint ------------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.EndPointId}
+     * Protobuf type {@code context.EndPoint}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.EndPointId)
-        context.ContextOuterClass.EndPointIdOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.EndPoint)
+        context.ContextOuterClass.EndPointOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+        return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_EndPointId_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_EndPoint_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
+                context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.EndPointId.newBuilder()
+      // Construct using context.ContextOuterClass.EndPoint.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -45776,23 +47936,21 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = null;
-        } else {
-          topologyId_ = null;
-          topologyIdBuilder_ = null;
-        }
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
         } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
         }
-        if (endpointUuidBuilder_ == null) {
-          endpointUuid_ = null;
+        endpointType_ = "";
+
+        kpiSampleTypes_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        if (endpointLocationBuilder_ == null) {
+          endpointLocation_ = null;
         } else {
-          endpointUuid_ = null;
-          endpointUuidBuilder_ = null;
+          endpointLocation_ = null;
+          endpointLocationBuilder_ = null;
         }
         return this;
       }
@@ -45800,17 +47958,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+        return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
-        return context.ContextOuterClass.EndPointId.getDefaultInstance();
+      public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
+        return context.ContextOuterClass.EndPoint.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPointId build() {
-        context.ContextOuterClass.EndPointId result = buildPartial();
+      public context.ContextOuterClass.EndPoint build() {
+        context.ContextOuterClass.EndPoint result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -45818,22 +47976,24 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPointId buildPartial() {
-        context.ContextOuterClass.EndPointId result = new context.ContextOuterClass.EndPointId(this);
-        if (topologyIdBuilder_ == null) {
-          result.topologyId_ = topologyId_;
+      public context.ContextOuterClass.EndPoint buildPartial() {
+        context.ContextOuterClass.EndPoint result = new context.ContextOuterClass.EndPoint(this);
+        int from_bitField0_ = bitField0_;
+        if (endpointIdBuilder_ == null) {
+          result.endpointId_ = endpointId_;
         } else {
-          result.topologyId_ = topologyIdBuilder_.build();
+          result.endpointId_ = endpointIdBuilder_.build();
         }
-        if (deviceIdBuilder_ == null) {
-          result.deviceId_ = deviceId_;
-        } else {
-          result.deviceId_ = deviceIdBuilder_.build();
+        result.endpointType_ = endpointType_;
+        if (((bitField0_ & 0x00000001) != 0)) {
+          kpiSampleTypes_ = java.util.Collections.unmodifiableList(kpiSampleTypes_);
+          bitField0_ = (bitField0_ & ~0x00000001);
         }
-        if (endpointUuidBuilder_ == null) {
-          result.endpointUuid_ = endpointUuid_;
+        result.kpiSampleTypes_ = kpiSampleTypes_;
+        if (endpointLocationBuilder_ == null) {
+          result.endpointLocation_ = endpointLocation_;
         } else {
-          result.endpointUuid_ = endpointUuidBuilder_.build();
+          result.endpointLocation_ = endpointLocationBuilder_.build();
         }
         onBuilt();
         return result;
@@ -45873,24 +48033,35 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.EndPointId) {
-          return mergeFrom((context.ContextOuterClass.EndPointId)other);
+        if (other instanceof context.ContextOuterClass.EndPoint) {
+          return mergeFrom((context.ContextOuterClass.EndPoint)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.EndPointId other) {
-        if (other == context.ContextOuterClass.EndPointId.getDefaultInstance()) return this;
-        if (other.hasTopologyId()) {
-          mergeTopologyId(other.getTopologyId());
+      public Builder mergeFrom(context.ContextOuterClass.EndPoint other) {
+        if (other == context.ContextOuterClass.EndPoint.getDefaultInstance()) return this;
+        if (other.hasEndpointId()) {
+          mergeEndpointId(other.getEndpointId());
         }
-        if (other.hasDeviceId()) {
-          mergeDeviceId(other.getDeviceId());
+        if (!other.getEndpointType().isEmpty()) {
+          endpointType_ = other.endpointType_;
+          onChanged();
         }
-        if (other.hasEndpointUuid()) {
-          mergeEndpointUuid(other.getEndpointUuid());
+        if (!other.kpiSampleTypes_.isEmpty()) {
+          if (kpiSampleTypes_.isEmpty()) {
+            kpiSampleTypes_ = other.kpiSampleTypes_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureKpiSampleTypesIsMutable();
+            kpiSampleTypes_.addAll(other.kpiSampleTypes_);
+          }
+          onChanged();
+        }
+        if (other.hasEndpointLocation()) {
+          mergeEndpointLocation(other.getEndpointLocation());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -45907,11 +48078,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.EndPointId parsedMessage = null;
+        context.ContextOuterClass.EndPoint parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.EndPointId) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.EndPoint) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -45920,362 +48091,460 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int bitField0_;
 
-      private context.ContextOuterClass.TopologyId topologyId_;
+      private context.ContextOuterClass.EndPointId endpointId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdBuilder_;
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       * @return Whether the topologyId field is set.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return Whether the endpointId field is set.
        */
-      public boolean hasTopologyId() {
-        return topologyIdBuilder_ != null || topologyId_ != null;
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       * @return The topologyId.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return The endpointId.
        */
-      public context.ContextOuterClass.TopologyId getTopologyId() {
-        if (topologyIdBuilder_ == null) {
-          return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+      public context.ContextOuterClass.EndPointId getEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         } else {
-          return topologyIdBuilder_.getMessage();
+          return endpointIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setTopologyId(context.ContextOuterClass.TopologyId value) {
-        if (topologyIdBuilder_ == null) {
+      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          topologyId_ = value;
+          endpointId_ = value;
           onChanged();
         } else {
-          topologyIdBuilder_.setMessage(value);
+          endpointIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setTopologyId(
-          context.ContextOuterClass.TopologyId.Builder builderForValue) {
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = builderForValue.build();
+      public Builder setEndpointId(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = builderForValue.build();
           onChanged();
         } else {
-          topologyIdBuilder_.setMessage(builderForValue.build());
+          endpointIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder mergeTopologyId(context.ContextOuterClass.TopologyId value) {
-        if (topologyIdBuilder_ == null) {
-          if (topologyId_ != null) {
-            topologyId_ =
-              context.ContextOuterClass.TopologyId.newBuilder(topologyId_).mergeFrom(value).buildPartial();
+      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (endpointId_ != null) {
+            endpointId_ =
+              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
           } else {
-            topologyId_ = value;
+            endpointId_ = value;
           }
           onChanged();
         } else {
-          topologyIdBuilder_.mergeFrom(value);
+          endpointIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+          onChanged();
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+        
+        onChanged();
+        return getEndpointIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+        if (endpointIdBuilder_ != null) {
+          return endpointIdBuilder_.getMessageOrBuilder();
+        } else {
+          return endpointId_ == null ?
+              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        }
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getEndpointIdFieldBuilder() {
+        if (endpointIdBuilder_ == null) {
+          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  getEndpointId(),
+                  getParentForChildren(),
+                  isClean());
+          endpointId_ = null;
+        }
+        return endpointIdBuilder_;
+      }
+
+      private java.lang.Object endpointType_ = "";
+      /**
+       * <code>string endpoint_type = 2;</code>
+       * @return The endpointType.
+       */
+      public java.lang.String getEndpointType() {
+        java.lang.Object ref = endpointType_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          endpointType_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string endpoint_type = 2;</code>
+       * @return The bytes for endpointType.
+       */
+      public com.google.protobuf.ByteString
+          getEndpointTypeBytes() {
+        java.lang.Object ref = endpointType_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          endpointType_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string endpoint_type = 2;</code>
+       * @param value The endpointType to set.
+       * @return This builder for chaining.
        */
-      public Builder clearTopologyId() {
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = null;
-          onChanged();
-        } else {
-          topologyId_ = null;
-          topologyIdBuilder_ = null;
-        }
-
+      public Builder setEndpointType(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        endpointType_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>string endpoint_type = 2;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
+      public Builder clearEndpointType() {
         
+        endpointType_ = getDefaultInstance().getEndpointType();
         onChanged();
-        return getTopologyIdFieldBuilder().getBuilder();
+        return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>string endpoint_type = 2;</code>
+       * @param value The bytes for endpointType to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
-        if (topologyIdBuilder_ != null) {
-          return topologyIdBuilder_.getMessageOrBuilder();
-        } else {
-          return topologyId_ == null ?
-              context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+      public Builder setEndpointTypeBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        endpointType_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.util.List<java.lang.Integer> kpiSampleTypes_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiSampleTypesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>(kpiSampleTypes_);
+          bitField0_ |= 0x00000001;
         }
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @return A list containing the kpiSampleTypes.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
-          getTopologyIdFieldBuilder() {
-        if (topologyIdBuilder_ == null) {
-          topologyIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
-                  getTopologyId(),
-                  getParentForChildren(),
-                  isClean());
-          topologyId_ = null;
-        }
-        return topologyIdBuilder_;
+      public java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList() {
+        return new com.google.protobuf.Internal.ListAdapter<
+            java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>(kpiSampleTypes_, kpiSampleTypes_converter_);
       }
-
-      private context.ContextOuterClass.DeviceId deviceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       * @return Whether the deviceId field is set.
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @return The count of kpiSampleTypes.
        */
-      public boolean hasDeviceId() {
-        return deviceIdBuilder_ != null || deviceId_ != null;
+      public int getKpiSampleTypesCount() {
+        return kpiSampleTypes_.size();
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       * @return The deviceId.
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param index The index of the element to return.
+       * @return The kpiSampleTypes at the given index.
        */
-      public context.ContextOuterClass.DeviceId getDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
-        } else {
-          return deviceIdBuilder_.getMessage();
-        }
+      public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index) {
+        return kpiSampleTypes_converter_.convert(kpiSampleTypes_.get(index));
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param index The index to set the value at.
+       * @param value The kpiSampleTypes to set.
+       * @return This builder for chaining.
        */
-      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          deviceId_ = value;
-          onChanged();
-        } else {
-          deviceIdBuilder_.setMessage(value);
+      public Builder setKpiSampleTypes(
+          int index, kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
+        if (value == null) {
+          throw new NullPointerException();
         }
-
+        ensureKpiSampleTypesIsMutable();
+        kpiSampleTypes_.set(index, value.getNumber());
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param value The kpiSampleTypes to add.
+       * @return This builder for chaining.
        */
-      public Builder setDeviceId(
-          context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = builderForValue.build();
-          onChanged();
-        } else {
-          deviceIdBuilder_.setMessage(builderForValue.build());
+      public Builder addKpiSampleTypes(kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
+        if (value == null) {
+          throw new NullPointerException();
         }
-
+        ensureKpiSampleTypesIsMutable();
+        kpiSampleTypes_.add(value.getNumber());
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param values The kpiSampleTypes to add.
+       * @return This builder for chaining.
        */
-      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
-          if (deviceId_ != null) {
-            deviceId_ =
-              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
-          } else {
-            deviceId_ = value;
-          }
-          onChanged();
-        } else {
-          deviceIdBuilder_.mergeFrom(value);
+      public Builder addAllKpiSampleTypes(
+          java.lang.Iterable<? extends kpi_sample_types.KpiSampleTypes.KpiSampleType> values) {
+        ensureKpiSampleTypesIsMutable();
+        for (kpi_sample_types.KpiSampleTypes.KpiSampleType value : values) {
+          kpiSampleTypes_.add(value.getNumber());
         }
-
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @return This builder for chaining.
        */
-      public Builder clearDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
-          onChanged();
-        } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
-        }
-
+      public Builder clearKpiSampleTypes() {
+        kpiSampleTypes_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
        */
-      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
-        
+      public java.util.List<java.lang.Integer>
+      getKpiSampleTypesValueList() {
+        return java.util.Collections.unmodifiableList(kpiSampleTypes_);
+      }
+      /**
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
+       */
+      public int getKpiSampleTypesValue(int index) {
+        return kpiSampleTypes_.get(index);
+      }
+      /**
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
+       * @return This builder for chaining.
+       */
+      public Builder setKpiSampleTypesValue(
+          int index, int value) {
+        ensureKpiSampleTypesIsMutable();
+        kpiSampleTypes_.set(index, value);
         onChanged();
-        return getDeviceIdFieldBuilder().getBuilder();
+        return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param value The enum numeric value on the wire for kpiSampleTypes to add.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-        if (deviceIdBuilder_ != null) {
-          return deviceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return deviceId_ == null ?
-              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
-        }
+      public Builder addKpiSampleTypesValue(int value) {
+        ensureKpiSampleTypesIsMutable();
+        kpiSampleTypes_.add(value);
+        onChanged();
+        return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param values The enum numeric values on the wire for kpiSampleTypes to add.
+       * @return This builder for chaining.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
-          getDeviceIdFieldBuilder() {
-        if (deviceIdBuilder_ == null) {
-          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
-                  getDeviceId(),
-                  getParentForChildren(),
-                  isClean());
-          deviceId_ = null;
+      public Builder addAllKpiSampleTypesValue(
+          java.lang.Iterable<java.lang.Integer> values) {
+        ensureKpiSampleTypesIsMutable();
+        for (int value : values) {
+          kpiSampleTypes_.add(value);
         }
-        return deviceIdBuilder_;
+        onChanged();
+        return this;
       }
 
-      private context.ContextOuterClass.Uuid endpointUuid_;
+      private context.ContextOuterClass.Location endpointLocation_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> endpointUuidBuilder_;
+          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> endpointLocationBuilder_;
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
-       * @return Whether the endpointUuid field is set.
+       * <code>.context.Location endpoint_location = 4;</code>
+       * @return Whether the endpointLocation field is set.
        */
-      public boolean hasEndpointUuid() {
-        return endpointUuidBuilder_ != null || endpointUuid_ != null;
+      public boolean hasEndpointLocation() {
+        return endpointLocationBuilder_ != null || endpointLocation_ != null;
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
-       * @return The endpointUuid.
+       * <code>.context.Location endpoint_location = 4;</code>
+       * @return The endpointLocation.
        */
-      public context.ContextOuterClass.Uuid getEndpointUuid() {
-        if (endpointUuidBuilder_ == null) {
-          return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
+      public context.ContextOuterClass.Location getEndpointLocation() {
+        if (endpointLocationBuilder_ == null) {
+          return endpointLocation_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
         } else {
-          return endpointUuidBuilder_.getMessage();
+          return endpointLocationBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
        */
-      public Builder setEndpointUuid(context.ContextOuterClass.Uuid value) {
-        if (endpointUuidBuilder_ == null) {
+      public Builder setEndpointLocation(context.ContextOuterClass.Location value) {
+        if (endpointLocationBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          endpointUuid_ = value;
+          endpointLocation_ = value;
           onChanged();
         } else {
-          endpointUuidBuilder_.setMessage(value);
+          endpointLocationBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
        */
-      public Builder setEndpointUuid(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (endpointUuidBuilder_ == null) {
-          endpointUuid_ = builderForValue.build();
+      public Builder setEndpointLocation(
+          context.ContextOuterClass.Location.Builder builderForValue) {
+        if (endpointLocationBuilder_ == null) {
+          endpointLocation_ = builderForValue.build();
           onChanged();
         } else {
-          endpointUuidBuilder_.setMessage(builderForValue.build());
+          endpointLocationBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
        */
-      public Builder mergeEndpointUuid(context.ContextOuterClass.Uuid value) {
-        if (endpointUuidBuilder_ == null) {
-          if (endpointUuid_ != null) {
-            endpointUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(endpointUuid_).mergeFrom(value).buildPartial();
+      public Builder mergeEndpointLocation(context.ContextOuterClass.Location value) {
+        if (endpointLocationBuilder_ == null) {
+          if (endpointLocation_ != null) {
+            endpointLocation_ =
+              context.ContextOuterClass.Location.newBuilder(endpointLocation_).mergeFrom(value).buildPartial();
           } else {
-            endpointUuid_ = value;
+            endpointLocation_ = value;
           }
           onChanged();
         } else {
-          endpointUuidBuilder_.mergeFrom(value);
+          endpointLocationBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
        */
-      public Builder clearEndpointUuid() {
-        if (endpointUuidBuilder_ == null) {
-          endpointUuid_ = null;
+      public Builder clearEndpointLocation() {
+        if (endpointLocationBuilder_ == null) {
+          endpointLocation_ = null;
           onChanged();
         } else {
-          endpointUuid_ = null;
-          endpointUuidBuilder_ = null;
+          endpointLocation_ = null;
+          endpointLocationBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getEndpointUuidBuilder() {
+      public context.ContextOuterClass.Location.Builder getEndpointLocationBuilder() {
         
         onChanged();
-        return getEndpointUuidFieldBuilder().getBuilder();
+        return getEndpointLocationFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
-        if (endpointUuidBuilder_ != null) {
-          return endpointUuidBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder() {
+        if (endpointLocationBuilder_ != null) {
+          return endpointLocationBuilder_.getMessageOrBuilder();
         } else {
-          return endpointUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
+          return endpointLocation_ == null ?
+              context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
         }
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getEndpointUuidFieldBuilder() {
-        if (endpointUuidBuilder_ == null) {
-          endpointUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getEndpointUuid(),
+          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> 
+          getEndpointLocationFieldBuilder() {
+        if (endpointLocationBuilder_ == null) {
+          endpointLocationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder>(
+                  getEndpointLocation(),
                   getParentForChildren(),
                   isClean());
-          endpointUuid_ = null;
+          endpointLocation_ = null;
         }
-        return endpointUuidBuilder_;
+        return endpointLocationBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -46290,143 +48559,96 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.EndPointId)
+      // @@protoc_insertion_point(builder_scope:context.EndPoint)
     }
 
-    // @@protoc_insertion_point(class_scope:context.EndPointId)
-    private static final context.ContextOuterClass.EndPointId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.EndPoint)
+    private static final context.ContextOuterClass.EndPoint DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPointId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPoint();
     }
 
-    public static context.ContextOuterClass.EndPointId getDefaultInstance() {
+    public static context.ContextOuterClass.EndPoint getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<EndPointId>
-        PARSER = new com.google.protobuf.AbstractParser<EndPointId>() {
+    private static final com.google.protobuf.Parser<EndPoint>
+        PARSER = new com.google.protobuf.AbstractParser<EndPoint>() {
       @java.lang.Override
-      public EndPointId parsePartialFrom(
+      public EndPoint parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new EndPointId(input, extensionRegistry);
+        return new EndPoint(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<EndPointId> parser() {
+    public static com.google.protobuf.Parser<EndPoint> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<EndPointId> getParserForType() {
+    public com.google.protobuf.Parser<EndPoint> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
+    public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface EndPointOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.EndPoint)
+  public interface ConfigRule_CustomOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConfigRule_Custom)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return Whether the endpointId field is set.
-     */
-    boolean hasEndpointId();
-    /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return The endpointId.
-     */
-    context.ContextOuterClass.EndPointId getEndpointId();
-    /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     */
-    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
-
-    /**
-     * <code>string endpoint_type = 2;</code>
-     * @return The endpointType.
+     * <code>string resource_key = 1;</code>
+     * @return The resourceKey.
      */
-    java.lang.String getEndpointType();
+    java.lang.String getResourceKey();
     /**
-     * <code>string endpoint_type = 2;</code>
-     * @return The bytes for endpointType.
+     * <code>string resource_key = 1;</code>
+     * @return The bytes for resourceKey.
      */
     com.google.protobuf.ByteString
-        getEndpointTypeBytes();
-
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return A list containing the kpiSampleTypes.
-     */
-    java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList();
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return The count of kpiSampleTypes.
-     */
-    int getKpiSampleTypesCount();
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @param index The index of the element to return.
-     * @return The kpiSampleTypes at the given index.
-     */
-    kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index);
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
-     */
-    java.util.List<java.lang.Integer>
-    getKpiSampleTypesValueList();
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @param index The index of the value to return.
-     * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
-     */
-    int getKpiSampleTypesValue(int index);
+        getResourceKeyBytes();
 
     /**
-     * <code>.context.Location endpoint_location = 4;</code>
-     * @return Whether the endpointLocation field is set.
-     */
-    boolean hasEndpointLocation();
-    /**
-     * <code>.context.Location endpoint_location = 4;</code>
-     * @return The endpointLocation.
+     * <code>string resource_value = 2;</code>
+     * @return The resourceValue.
      */
-    context.ContextOuterClass.Location getEndpointLocation();
+    java.lang.String getResourceValue();
     /**
-     * <code>.context.Location endpoint_location = 4;</code>
+     * <code>string resource_value = 2;</code>
+     * @return The bytes for resourceValue.
      */
-    context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder();
+    com.google.protobuf.ByteString
+        getResourceValueBytes();
   }
   /**
-   * Protobuf type {@code context.EndPoint}
+   * Protobuf type {@code context.ConfigRule_Custom}
    */
-  public static final class EndPoint extends
+  public static final class ConfigRule_Custom extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.EndPoint)
-      EndPointOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConfigRule_Custom)
+      ConfigRule_CustomOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use EndPoint.newBuilder() to construct.
-    private EndPoint(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConfigRule_Custom.newBuilder() to construct.
+    private ConfigRule_Custom(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private EndPoint() {
-      endpointType_ = "";
-      kpiSampleTypes_ = java.util.Collections.emptyList();
+    private ConfigRule_Custom() {
+      resourceKey_ = "";
+      resourceValue_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new EndPoint();
+      return new ConfigRule_Custom();
     }
 
     @java.lang.Override
@@ -46434,7 +48656,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private EndPoint(
+    private ConfigRule_Custom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -46442,70 +48664,26 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            case 10: {
-              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
-              if (endpointId_ != null) {
-                subBuilder = endpointId_.toBuilder();
-              }
-              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(endpointId_);
-                endpointId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              endpointType_ = s;
-              break;
-            }
-            case 24: {
-              int rawValue = input.readEnum();
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              kpiSampleTypes_.add(rawValue);
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
               break;
-            }
-            case 26: {
-              int length = input.readRawVarint32();
-              int oldLimit = input.pushLimit(length);
-              while(input.getBytesUntilLimit() > 0) {
-                int rawValue = input.readEnum();
-                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                  kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>();
-                  mutable_bitField0_ |= 0x00000001;
-                }
-                kpiSampleTypes_.add(rawValue);
-              }
-              input.popLimit(oldLimit);
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              resourceKey_ = s;
               break;
             }
-            case 34: {
-              context.ContextOuterClass.Location.Builder subBuilder = null;
-              if (endpointLocation_ != null) {
-                subBuilder = endpointLocation_.toBuilder();
-              }
-              endpointLocation_ = input.readMessage(context.ContextOuterClass.Location.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(endpointLocation_);
-                endpointLocation_ = subBuilder.buildPartial();
-              }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
 
+              resourceValue_ = s;
               break;
             }
             default: {
@@ -46523,172 +48701,97 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          kpiSampleTypes_ = java.util.Collections.unmodifiableList(kpiSampleTypes_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_EndPoint_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
-    }
-
-    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.EndPointId endpointId_;
-    /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return Whether the endpointId field is set.
-     */
-    @java.lang.Override
-    public boolean hasEndpointId() {
-      return endpointId_ != null;
-    }
-    /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return The endpointId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EndPointId getEndpointId() {
-      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
-    }
-    /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-      return getEndpointId();
+              context.ContextOuterClass.ConfigRule_Custom.class, context.ContextOuterClass.ConfigRule_Custom.Builder.class);
     }
 
-    public static final int ENDPOINT_TYPE_FIELD_NUMBER = 2;
-    private volatile java.lang.Object endpointType_;
+    public static final int RESOURCE_KEY_FIELD_NUMBER = 1;
+    private volatile java.lang.Object resourceKey_;
     /**
-     * <code>string endpoint_type = 2;</code>
-     * @return The endpointType.
+     * <code>string resource_key = 1;</code>
+     * @return The resourceKey.
      */
     @java.lang.Override
-    public java.lang.String getEndpointType() {
-      java.lang.Object ref = endpointType_;
+    public java.lang.String getResourceKey() {
+      java.lang.Object ref = resourceKey_;
       if (ref instanceof java.lang.String) {
         return (java.lang.String) ref;
       } else {
         com.google.protobuf.ByteString bs = 
             (com.google.protobuf.ByteString) ref;
         java.lang.String s = bs.toStringUtf8();
-        endpointType_ = s;
+        resourceKey_ = s;
         return s;
       }
     }
     /**
-     * <code>string endpoint_type = 2;</code>
-     * @return The bytes for endpointType.
+     * <code>string resource_key = 1;</code>
+     * @return The bytes for resourceKey.
      */
     @java.lang.Override
     public com.google.protobuf.ByteString
-        getEndpointTypeBytes() {
-      java.lang.Object ref = endpointType_;
+        getResourceKeyBytes() {
+      java.lang.Object ref = resourceKey_;
       if (ref instanceof java.lang.String) {
         com.google.protobuf.ByteString b = 
             com.google.protobuf.ByteString.copyFromUtf8(
                 (java.lang.String) ref);
-        endpointType_ = b;
+        resourceKey_ = b;
         return b;
       } else {
         return (com.google.protobuf.ByteString) ref;
       }
     }
 
-    public static final int KPI_SAMPLE_TYPES_FIELD_NUMBER = 3;
-    private java.util.List<java.lang.Integer> kpiSampleTypes_;
-    private static final com.google.protobuf.Internal.ListAdapter.Converter<
-        java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType> kpiSampleTypes_converter_ =
-            new com.google.protobuf.Internal.ListAdapter.Converter<
-                java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>() {
-              public kpi_sample_types.KpiSampleTypes.KpiSampleType convert(java.lang.Integer from) {
-                @SuppressWarnings("deprecation")
-                kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(from);
-                return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
-              }
-            };
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return A list containing the kpiSampleTypes.
-     */
-    @java.lang.Override
-    public java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList() {
-      return new com.google.protobuf.Internal.ListAdapter<
-          java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>(kpiSampleTypes_, kpiSampleTypes_converter_);
-    }
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return The count of kpiSampleTypes.
-     */
-    @java.lang.Override
-    public int getKpiSampleTypesCount() {
-      return kpiSampleTypes_.size();
-    }
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @param index The index of the element to return.
-     * @return The kpiSampleTypes at the given index.
-     */
-    @java.lang.Override
-    public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index) {
-      return kpiSampleTypes_converter_.convert(kpiSampleTypes_.get(index));
-    }
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
-     */
-    @java.lang.Override
-    public java.util.List<java.lang.Integer>
-    getKpiSampleTypesValueList() {
-      return kpiSampleTypes_;
-    }
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @param index The index of the value to return.
-     * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
-     */
-    @java.lang.Override
-    public int getKpiSampleTypesValue(int index) {
-      return kpiSampleTypes_.get(index);
-    }
-    private int kpiSampleTypesMemoizedSerializedSize;
-
-    public static final int ENDPOINT_LOCATION_FIELD_NUMBER = 4;
-    private context.ContextOuterClass.Location endpointLocation_;
-    /**
-     * <code>.context.Location endpoint_location = 4;</code>
-     * @return Whether the endpointLocation field is set.
-     */
-    @java.lang.Override
-    public boolean hasEndpointLocation() {
-      return endpointLocation_ != null;
-    }
+    public static final int RESOURCE_VALUE_FIELD_NUMBER = 2;
+    private volatile java.lang.Object resourceValue_;
     /**
-     * <code>.context.Location endpoint_location = 4;</code>
-     * @return The endpointLocation.
+     * <code>string resource_value = 2;</code>
+     * @return The resourceValue.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Location getEndpointLocation() {
-      return endpointLocation_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
+    public java.lang.String getResourceValue() {
+      java.lang.Object ref = resourceValue_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        resourceValue_ = s;
+        return s;
+      }
     }
     /**
-     * <code>.context.Location endpoint_location = 4;</code>
+     * <code>string resource_value = 2;</code>
+     * @return The bytes for resourceValue.
      */
     @java.lang.Override
-    public context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder() {
-      return getEndpointLocation();
+    public com.google.protobuf.ByteString
+        getResourceValueBytes() {
+      java.lang.Object ref = resourceValue_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        resourceValue_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
     private byte memoizedIsInitialized = -1;
@@ -46705,22 +48808,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      getSerializedSize();
-      if (endpointId_ != null) {
-        output.writeMessage(1, getEndpointId());
-      }
-      if (!getEndpointTypeBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, endpointType_);
-      }
-      if (getKpiSampleTypesList().size() > 0) {
-        output.writeUInt32NoTag(26);
-        output.writeUInt32NoTag(kpiSampleTypesMemoizedSerializedSize);
-      }
-      for (int i = 0; i < kpiSampleTypes_.size(); i++) {
-        output.writeEnumNoTag(kpiSampleTypes_.get(i));
+      if (!getResourceKeyBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, resourceKey_);
       }
-      if (endpointLocation_ != null) {
-        output.writeMessage(4, getEndpointLocation());
+      if (!getResourceValueBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, resourceValue_);
       }
       unknownFields.writeTo(output);
     }
@@ -46731,28 +48823,11 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (endpointId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEndpointId());
-      }
-      if (!getEndpointTypeBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, endpointType_);
-      }
-      {
-        int dataSize = 0;
-        for (int i = 0; i < kpiSampleTypes_.size(); i++) {
-          dataSize += com.google.protobuf.CodedOutputStream
-            .computeEnumSizeNoTag(kpiSampleTypes_.get(i));
-        }
-        size += dataSize;
-        if (!getKpiSampleTypesList().isEmpty()) {  size += 1;
-          size += com.google.protobuf.CodedOutputStream
-            .computeUInt32SizeNoTag(dataSize);
-        }kpiSampleTypesMemoizedSerializedSize = dataSize;
+      if (!getResourceKeyBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, resourceKey_);
       }
-      if (endpointLocation_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, getEndpointLocation());
+      if (!getResourceValueBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, resourceValue_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -46760,28 +48835,19 @@ public final class ContextOuterClass {
     }
 
     @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof context.ContextOuterClass.EndPoint)) {
-        return super.equals(obj);
-      }
-      context.ContextOuterClass.EndPoint other = (context.ContextOuterClass.EndPoint) obj;
-
-      if (hasEndpointId() != other.hasEndpointId()) return false;
-      if (hasEndpointId()) {
-        if (!getEndpointId()
-            .equals(other.getEndpointId())) return false;
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
       }
-      if (!getEndpointType()
-          .equals(other.getEndpointType())) return false;
-      if (!kpiSampleTypes_.equals(other.kpiSampleTypes_)) return false;
-      if (hasEndpointLocation() != other.hasEndpointLocation()) return false;
-      if (hasEndpointLocation()) {
-        if (!getEndpointLocation()
-            .equals(other.getEndpointLocation())) return false;
+      if (!(obj instanceof context.ContextOuterClass.ConfigRule_Custom)) {
+        return super.equals(obj);
       }
+      context.ContextOuterClass.ConfigRule_Custom other = (context.ContextOuterClass.ConfigRule_Custom) obj;
+
+      if (!getResourceKey()
+          .equals(other.getResourceKey())) return false;
+      if (!getResourceValue()
+          .equals(other.getResourceValue())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -46793,88 +48859,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasEndpointId()) {
-        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getEndpointId().hashCode();
-      }
-      hash = (37 * hash) + ENDPOINT_TYPE_FIELD_NUMBER;
-      hash = (53 * hash) + getEndpointType().hashCode();
-      if (getKpiSampleTypesCount() > 0) {
-        hash = (37 * hash) + KPI_SAMPLE_TYPES_FIELD_NUMBER;
-        hash = (53 * hash) + kpiSampleTypes_.hashCode();
-      }
-      if (hasEndpointLocation()) {
-        hash = (37 * hash) + ENDPOINT_LOCATION_FIELD_NUMBER;
-        hash = (53 * hash) + getEndpointLocation().hashCode();
-      }
+      hash = (37 * hash) + RESOURCE_KEY_FIELD_NUMBER;
+      hash = (53 * hash) + getResourceKey().hashCode();
+      hash = (37 * hash) + RESOURCE_VALUE_FIELD_NUMBER;
+      hash = (53 * hash) + getResourceValue().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConfigRule_Custom parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPoint parseDelimitedFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -46887,7 +48943,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.EndPoint prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConfigRule_Custom prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -46903,26 +48959,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.EndPoint}
+     * Protobuf type {@code context.ConfigRule_Custom}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.EndPoint)
-        context.ContextOuterClass.EndPointOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConfigRule_Custom)
+        context.ContextOuterClass.ConfigRule_CustomOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_EndPoint_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
+                context.ContextOuterClass.ConfigRule_Custom.class, context.ContextOuterClass.ConfigRule_Custom.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.EndPoint.newBuilder()
+      // Construct using context.ContextOuterClass.ConfigRule_Custom.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -46940,39 +48996,27 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = null;
-        } else {
-          endpointId_ = null;
-          endpointIdBuilder_ = null;
-        }
-        endpointType_ = "";
+        resourceKey_ = "";
+
+        resourceValue_ = "";
 
-        kpiSampleTypes_ = java.util.Collections.emptyList();
-        bitField0_ = (bitField0_ & ~0x00000001);
-        if (endpointLocationBuilder_ == null) {
-          endpointLocation_ = null;
-        } else {
-          endpointLocation_ = null;
-          endpointLocationBuilder_ = null;
-        }
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
-        return context.ContextOuterClass.EndPoint.getDefaultInstance();
+      public context.ContextOuterClass.ConfigRule_Custom getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPoint build() {
-        context.ContextOuterClass.EndPoint result = buildPartial();
+      public context.ContextOuterClass.ConfigRule_Custom build() {
+        context.ContextOuterClass.ConfigRule_Custom result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -46980,25 +49024,10 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPoint buildPartial() {
-        context.ContextOuterClass.EndPoint result = new context.ContextOuterClass.EndPoint(this);
-        int from_bitField0_ = bitField0_;
-        if (endpointIdBuilder_ == null) {
-          result.endpointId_ = endpointId_;
-        } else {
-          result.endpointId_ = endpointIdBuilder_.build();
-        }
-        result.endpointType_ = endpointType_;
-        if (((bitField0_ & 0x00000001) != 0)) {
-          kpiSampleTypes_ = java.util.Collections.unmodifiableList(kpiSampleTypes_);
-          bitField0_ = (bitField0_ & ~0x00000001);
-        }
-        result.kpiSampleTypes_ = kpiSampleTypes_;
-        if (endpointLocationBuilder_ == null) {
-          result.endpointLocation_ = endpointLocation_;
-        } else {
-          result.endpointLocation_ = endpointLocationBuilder_.build();
-        }
+      public context.ContextOuterClass.ConfigRule_Custom buildPartial() {
+        context.ContextOuterClass.ConfigRule_Custom result = new context.ContextOuterClass.ConfigRule_Custom(this);
+        result.resourceKey_ = resourceKey_;
+        result.resourceValue_ = resourceValue_;
         onBuilt();
         return result;
       }
@@ -47031,524 +49060,209 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.EndPoint) {
-          return mergeFrom((context.ContextOuterClass.EndPoint)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(context.ContextOuterClass.EndPoint other) {
-        if (other == context.ContextOuterClass.EndPoint.getDefaultInstance()) return this;
-        if (other.hasEndpointId()) {
-          mergeEndpointId(other.getEndpointId());
-        }
-        if (!other.getEndpointType().isEmpty()) {
-          endpointType_ = other.endpointType_;
-          onChanged();
-        }
-        if (!other.kpiSampleTypes_.isEmpty()) {
-          if (kpiSampleTypes_.isEmpty()) {
-            kpiSampleTypes_ = other.kpiSampleTypes_;
-            bitField0_ = (bitField0_ & ~0x00000001);
-          } else {
-            ensureKpiSampleTypesIsMutable();
-            kpiSampleTypes_.addAll(other.kpiSampleTypes_);
-          }
-          onChanged();
-        }
-        if (other.hasEndpointLocation()) {
-          mergeEndpointLocation(other.getEndpointLocation());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.EndPoint parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.EndPoint) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private context.ContextOuterClass.EndPointId endpointId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       * @return Whether the endpointId field is set.
-       */
-      public boolean hasEndpointId() {
-        return endpointIdBuilder_ != null || endpointId_ != null;
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       * @return The endpointId.
-       */
-      public context.ContextOuterClass.EndPointId getEndpointId() {
-        if (endpointIdBuilder_ == null) {
-          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
-        } else {
-          return endpointIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
-        if (endpointIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          endpointId_ = value;
-          onChanged();
-        } else {
-          endpointIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      public Builder setEndpointId(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = builderForValue.build();
-          onChanged();
-        } else {
-          endpointIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
-        if (endpointIdBuilder_ == null) {
-          if (endpointId_ != null) {
-            endpointId_ =
-              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
-          } else {
-            endpointId_ = value;
-          }
-          onChanged();
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ConfigRule_Custom) {
+          return mergeFrom((context.ContextOuterClass.ConfigRule_Custom)other);
         } else {
-          endpointIdBuilder_.mergeFrom(value);
+          super.mergeFrom(other);
+          return this;
         }
-
-        return this;
       }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      public Builder clearEndpointId() {
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = null;
+
+      public Builder mergeFrom(context.ContextOuterClass.ConfigRule_Custom other) {
+        if (other == context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance()) return this;
+        if (!other.getResourceKey().isEmpty()) {
+          resourceKey_ = other.resourceKey_;
           onChanged();
-        } else {
-          endpointId_ = null;
-          endpointIdBuilder_ = null;
         }
-
-        return this;
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
-        
+        if (!other.getResourceValue().isEmpty()) {
+          resourceValue_ = other.resourceValue_;
+          onChanged();
+        }
+        this.mergeUnknownFields(other.unknownFields);
         onChanged();
-        return getEndpointIdFieldBuilder().getBuilder();
+        return this;
       }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-        if (endpointIdBuilder_ != null) {
-          return endpointIdBuilder_.getMessageOrBuilder();
-        } else {
-          return endpointId_ == null ?
-              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
-        }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getEndpointIdFieldBuilder() {
-        if (endpointIdBuilder_ == null) {
-          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  getEndpointId(),
-                  getParentForChildren(),
-                  isClean());
-          endpointId_ = null;
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ConfigRule_Custom parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ConfigRule_Custom) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
         }
-        return endpointIdBuilder_;
+        return this;
       }
 
-      private java.lang.Object endpointType_ = "";
+      private java.lang.Object resourceKey_ = "";
       /**
-       * <code>string endpoint_type = 2;</code>
-       * @return The endpointType.
+       * <code>string resource_key = 1;</code>
+       * @return The resourceKey.
        */
-      public java.lang.String getEndpointType() {
-        java.lang.Object ref = endpointType_;
+      public java.lang.String getResourceKey() {
+        java.lang.Object ref = resourceKey_;
         if (!(ref instanceof java.lang.String)) {
           com.google.protobuf.ByteString bs =
               (com.google.protobuf.ByteString) ref;
           java.lang.String s = bs.toStringUtf8();
-          endpointType_ = s;
+          resourceKey_ = s;
           return s;
         } else {
           return (java.lang.String) ref;
         }
       }
       /**
-       * <code>string endpoint_type = 2;</code>
-       * @return The bytes for endpointType.
+       * <code>string resource_key = 1;</code>
+       * @return The bytes for resourceKey.
        */
       public com.google.protobuf.ByteString
-          getEndpointTypeBytes() {
-        java.lang.Object ref = endpointType_;
+          getResourceKeyBytes() {
+        java.lang.Object ref = resourceKey_;
         if (ref instanceof String) {
           com.google.protobuf.ByteString b = 
               com.google.protobuf.ByteString.copyFromUtf8(
                   (java.lang.String) ref);
-          endpointType_ = b;
+          resourceKey_ = b;
           return b;
         } else {
           return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>string endpoint_type = 2;</code>
-       * @param value The endpointType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setEndpointType(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        endpointType_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string endpoint_type = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearEndpointType() {
-        
-        endpointType_ = getDefaultInstance().getEndpointType();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string endpoint_type = 2;</code>
-       * @param value The bytes for endpointType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setEndpointTypeBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        endpointType_ = value;
-        onChanged();
-        return this;
-      }
-
-      private java.util.List<java.lang.Integer> kpiSampleTypes_ =
-        java.util.Collections.emptyList();
-      private void ensureKpiSampleTypesIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>(kpiSampleTypes_);
-          bitField0_ |= 0x00000001;
-        }
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @return A list containing the kpiSampleTypes.
-       */
-      public java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList() {
-        return new com.google.protobuf.Internal.ListAdapter<
-            java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>(kpiSampleTypes_, kpiSampleTypes_converter_);
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @return The count of kpiSampleTypes.
-       */
-      public int getKpiSampleTypesCount() {
-        return kpiSampleTypes_.size();
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param index The index of the element to return.
-       * @return The kpiSampleTypes at the given index.
-       */
-      public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index) {
-        return kpiSampleTypes_converter_.convert(kpiSampleTypes_.get(index));
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param index The index to set the value at.
-       * @param value The kpiSampleTypes to set.
-       * @return This builder for chaining.
-       */
-      public Builder setKpiSampleTypes(
-          int index, kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        ensureKpiSampleTypesIsMutable();
-        kpiSampleTypes_.set(index, value.getNumber());
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param value The kpiSampleTypes to add.
-       * @return This builder for chaining.
-       */
-      public Builder addKpiSampleTypes(kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        ensureKpiSampleTypesIsMutable();
-        kpiSampleTypes_.add(value.getNumber());
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param values The kpiSampleTypes to add.
-       * @return This builder for chaining.
-       */
-      public Builder addAllKpiSampleTypes(
-          java.lang.Iterable<? extends kpi_sample_types.KpiSampleTypes.KpiSampleType> values) {
-        ensureKpiSampleTypesIsMutable();
-        for (kpi_sample_types.KpiSampleTypes.KpiSampleType value : values) {
-          kpiSampleTypes_.add(value.getNumber());
-        }
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearKpiSampleTypes() {
-        kpiSampleTypes_ = java.util.Collections.emptyList();
-        bitField0_ = (bitField0_ & ~0x00000001);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
-       */
-      public java.util.List<java.lang.Integer>
-      getKpiSampleTypesValueList() {
-        return java.util.Collections.unmodifiableList(kpiSampleTypes_);
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param index The index of the value to return.
-       * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
-       */
-      public int getKpiSampleTypesValue(int index) {
-        return kpiSampleTypes_.get(index);
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param index The index of the value to return.
-       * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
+       * <code>string resource_key = 1;</code>
+       * @param value The resourceKey to set.
        * @return This builder for chaining.
        */
-      public Builder setKpiSampleTypesValue(
-          int index, int value) {
-        ensureKpiSampleTypesIsMutable();
-        kpiSampleTypes_.set(index, value);
+      public Builder setResourceKey(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        resourceKey_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param value The enum numeric value on the wire for kpiSampleTypes to add.
+       * <code>string resource_key = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder addKpiSampleTypesValue(int value) {
-        ensureKpiSampleTypesIsMutable();
-        kpiSampleTypes_.add(value);
+      public Builder clearResourceKey() {
+        
+        resourceKey_ = getDefaultInstance().getResourceKey();
         onChanged();
         return this;
       }
       /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param values The enum numeric values on the wire for kpiSampleTypes to add.
+       * <code>string resource_key = 1;</code>
+       * @param value The bytes for resourceKey to set.
        * @return This builder for chaining.
        */
-      public Builder addAllKpiSampleTypesValue(
-          java.lang.Iterable<java.lang.Integer> values) {
-        ensureKpiSampleTypesIsMutable();
-        for (int value : values) {
-          kpiSampleTypes_.add(value);
-        }
+      public Builder setResourceKeyBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        resourceKey_ = value;
         onChanged();
         return this;
       }
 
-      private context.ContextOuterClass.Location endpointLocation_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> endpointLocationBuilder_;
-      /**
-       * <code>.context.Location endpoint_location = 4;</code>
-       * @return Whether the endpointLocation field is set.
-       */
-      public boolean hasEndpointLocation() {
-        return endpointLocationBuilder_ != null || endpointLocation_ != null;
-      }
-      /**
-       * <code>.context.Location endpoint_location = 4;</code>
-       * @return The endpointLocation.
-       */
-      public context.ContextOuterClass.Location getEndpointLocation() {
-        if (endpointLocationBuilder_ == null) {
-          return endpointLocation_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
-        } else {
-          return endpointLocationBuilder_.getMessage();
-        }
-      }
+      private java.lang.Object resourceValue_ = "";
       /**
-       * <code>.context.Location endpoint_location = 4;</code>
+       * <code>string resource_value = 2;</code>
+       * @return The resourceValue.
        */
-      public Builder setEndpointLocation(context.ContextOuterClass.Location value) {
-        if (endpointLocationBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          endpointLocation_ = value;
-          onChanged();
+      public java.lang.String getResourceValue() {
+        java.lang.Object ref = resourceValue_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          resourceValue_ = s;
+          return s;
         } else {
-          endpointLocationBuilder_.setMessage(value);
+          return (java.lang.String) ref;
         }
-
-        return this;
       }
       /**
-       * <code>.context.Location endpoint_location = 4;</code>
+       * <code>string resource_value = 2;</code>
+       * @return The bytes for resourceValue.
        */
-      public Builder setEndpointLocation(
-          context.ContextOuterClass.Location.Builder builderForValue) {
-        if (endpointLocationBuilder_ == null) {
-          endpointLocation_ = builderForValue.build();
-          onChanged();
+      public com.google.protobuf.ByteString
+          getResourceValueBytes() {
+        java.lang.Object ref = resourceValue_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          resourceValue_ = b;
+          return b;
         } else {
-          endpointLocationBuilder_.setMessage(builderForValue.build());
+          return (com.google.protobuf.ByteString) ref;
         }
-
-        return this;
       }
       /**
-       * <code>.context.Location endpoint_location = 4;</code>
+       * <code>string resource_value = 2;</code>
+       * @param value The resourceValue to set.
+       * @return This builder for chaining.
        */
-      public Builder mergeEndpointLocation(context.ContextOuterClass.Location value) {
-        if (endpointLocationBuilder_ == null) {
-          if (endpointLocation_ != null) {
-            endpointLocation_ =
-              context.ContextOuterClass.Location.newBuilder(endpointLocation_).mergeFrom(value).buildPartial();
-          } else {
-            endpointLocation_ = value;
-          }
-          onChanged();
-        } else {
-          endpointLocationBuilder_.mergeFrom(value);
-        }
-
+      public Builder setResourceValue(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        resourceValue_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.Location endpoint_location = 4;</code>
+       * <code>string resource_value = 2;</code>
+       * @return This builder for chaining.
        */
-      public Builder clearEndpointLocation() {
-        if (endpointLocationBuilder_ == null) {
-          endpointLocation_ = null;
-          onChanged();
-        } else {
-          endpointLocation_ = null;
-          endpointLocationBuilder_ = null;
-        }
-
+      public Builder clearResourceValue() {
+        
+        resourceValue_ = getDefaultInstance().getResourceValue();
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.Location endpoint_location = 4;</code>
+       * <code>string resource_value = 2;</code>
+       * @param value The bytes for resourceValue to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.Location.Builder getEndpointLocationBuilder() {
+      public Builder setResourceValueBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
         
+        resourceValue_ = value;
         onChanged();
-        return getEndpointLocationFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.Location endpoint_location = 4;</code>
-       */
-      public context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder() {
-        if (endpointLocationBuilder_ != null) {
-          return endpointLocationBuilder_.getMessageOrBuilder();
-        } else {
-          return endpointLocation_ == null ?
-              context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
-        }
-      }
-      /**
-       * <code>.context.Location endpoint_location = 4;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> 
-          getEndpointLocationFieldBuilder() {
-        if (endpointLocationBuilder_ == null) {
-          endpointLocationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder>(
-                  getEndpointLocation(),
-                  getParentForChildren(),
-                  isClean());
-          endpointLocation_ = null;
-        }
-        return endpointLocationBuilder_;
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -47563,96 +49277,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.EndPoint)
+      // @@protoc_insertion_point(builder_scope:context.ConfigRule_Custom)
     }
 
-    // @@protoc_insertion_point(class_scope:context.EndPoint)
-    private static final context.ContextOuterClass.EndPoint DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConfigRule_Custom)
+    private static final context.ContextOuterClass.ConfigRule_Custom DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPoint();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule_Custom();
     }
 
-    public static context.ContextOuterClass.EndPoint getDefaultInstance() {
+    public static context.ContextOuterClass.ConfigRule_Custom getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<EndPoint>
-        PARSER = new com.google.protobuf.AbstractParser<EndPoint>() {
+    private static final com.google.protobuf.Parser<ConfigRule_Custom>
+        PARSER = new com.google.protobuf.AbstractParser<ConfigRule_Custom>() {
       @java.lang.Override
-      public EndPoint parsePartialFrom(
+      public ConfigRule_Custom parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new EndPoint(input, extensionRegistry);
+        return new ConfigRule_Custom(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<EndPoint> parser() {
+    public static com.google.protobuf.Parser<ConfigRule_Custom> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<EndPoint> getParserForType() {
+    public com.google.protobuf.Parser<ConfigRule_Custom> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConfigRule_Custom getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConfigRule_CustomOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConfigRule_Custom)
+  public interface ConfigRule_ACLOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConfigRule_ACL)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>string resource_key = 1;</code>
-     * @return The resourceKey.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
-    java.lang.String getResourceKey();
+    boolean hasEndpointId();
     /**
-     * <code>string resource_key = 1;</code>
-     * @return The bytes for resourceKey.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
-    com.google.protobuf.ByteString
-        getResourceKeyBytes();
+    context.ContextOuterClass.EndPointId getEndpointId();
+    /**
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
 
     /**
-     * <code>string resource_value = 2;</code>
-     * @return The resourceValue.
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     * @return Whether the ruleSet field is set.
      */
-    java.lang.String getResourceValue();
+    boolean hasRuleSet();
     /**
-     * <code>string resource_value = 2;</code>
-     * @return The bytes for resourceValue.
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     * @return The ruleSet.
      */
-    com.google.protobuf.ByteString
-        getResourceValueBytes();
+    acl.Acl.AclRuleSet getRuleSet();
+    /**
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     */
+    acl.Acl.AclRuleSetOrBuilder getRuleSetOrBuilder();
   }
   /**
-   * Protobuf type {@code context.ConfigRule_Custom}
+   * Protobuf type {@code context.ConfigRule_ACL}
    */
-  public static final class ConfigRule_Custom extends
+  public static final class ConfigRule_ACL extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConfigRule_Custom)
-      ConfigRule_CustomOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConfigRule_ACL)
+      ConfigRule_ACLOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConfigRule_Custom.newBuilder() to construct.
-    private ConfigRule_Custom(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConfigRule_ACL.newBuilder() to construct.
+    private ConfigRule_ACL(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConfigRule_Custom() {
-      resourceKey_ = "";
-      resourceValue_ = "";
+    private ConfigRule_ACL() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConfigRule_Custom();
+      return new ConfigRule_ACL();
     }
 
     @java.lang.Override
@@ -47660,7 +49378,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConfigRule_Custom(
+    private ConfigRule_ACL(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -47679,15 +49397,29 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              java.lang.String s = input.readStringRequireUtf8();
+              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
+              if (endpointId_ != null) {
+                subBuilder = endpointId_.toBuilder();
+              }
+              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endpointId_);
+                endpointId_ = subBuilder.buildPartial();
+              }
 
-              resourceKey_ = s;
               break;
             }
             case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
+              acl.Acl.AclRuleSet.Builder subBuilder = null;
+              if (ruleSet_ != null) {
+                subBuilder = ruleSet_.toBuilder();
+              }
+              ruleSet_ = input.readMessage(acl.Acl.AclRuleSet.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(ruleSet_);
+                ruleSet_ = subBuilder.buildPartial();
+              }
 
-              resourceValue_ = s;
               break;
             }
             default: {
@@ -47711,91 +49443,67 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConfigRule_Custom.class, context.ContextOuterClass.ConfigRule_Custom.Builder.class);
+              context.ContextOuterClass.ConfigRule_ACL.class, context.ContextOuterClass.ConfigRule_ACL.Builder.class);
     }
 
-    public static final int RESOURCE_KEY_FIELD_NUMBER = 1;
-    private volatile java.lang.Object resourceKey_;
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.EndPointId endpointId_;
     /**
-     * <code>string resource_key = 1;</code>
-     * @return The resourceKey.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
     @java.lang.Override
-    public java.lang.String getResourceKey() {
-      java.lang.Object ref = resourceKey_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        resourceKey_ = s;
-        return s;
-      }
+    public boolean hasEndpointId() {
+      return endpointId_ != null;
     }
     /**
-     * <code>string resource_key = 1;</code>
-     * @return The bytes for resourceKey.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getResourceKeyBytes() {
-      java.lang.Object ref = resourceKey_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        resourceKey_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public context.ContextOuterClass.EndPointId getEndpointId() {
+      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+    }
+    /**
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+      return getEndpointId();
     }
 
-    public static final int RESOURCE_VALUE_FIELD_NUMBER = 2;
-    private volatile java.lang.Object resourceValue_;
+    public static final int RULE_SET_FIELD_NUMBER = 2;
+    private acl.Acl.AclRuleSet ruleSet_;
     /**
-     * <code>string resource_value = 2;</code>
-     * @return The resourceValue.
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     * @return Whether the ruleSet field is set.
      */
     @java.lang.Override
-    public java.lang.String getResourceValue() {
-      java.lang.Object ref = resourceValue_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        resourceValue_ = s;
-        return s;
-      }
+    public boolean hasRuleSet() {
+      return ruleSet_ != null;
     }
     /**
-     * <code>string resource_value = 2;</code>
-     * @return The bytes for resourceValue.
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     * @return The ruleSet.
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getResourceValueBytes() {
-      java.lang.Object ref = resourceValue_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        resourceValue_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public acl.Acl.AclRuleSet getRuleSet() {
+      return ruleSet_ == null ? acl.Acl.AclRuleSet.getDefaultInstance() : ruleSet_;
+    }
+    /**
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     */
+    @java.lang.Override
+    public acl.Acl.AclRuleSetOrBuilder getRuleSetOrBuilder() {
+      return getRuleSet();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -47812,11 +49520,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (!getResourceKeyBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, resourceKey_);
+      if (endpointId_ != null) {
+        output.writeMessage(1, getEndpointId());
       }
-      if (!getResourceValueBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, resourceValue_);
+      if (ruleSet_ != null) {
+        output.writeMessage(2, getRuleSet());
       }
       unknownFields.writeTo(output);
     }
@@ -47827,11 +49535,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (!getResourceKeyBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, resourceKey_);
+      if (endpointId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getEndpointId());
       }
-      if (!getResourceValueBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, resourceValue_);
+      if (ruleSet_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getRuleSet());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -47843,15 +49553,21 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConfigRule_Custom)) {
+      if (!(obj instanceof context.ContextOuterClass.ConfigRule_ACL)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConfigRule_Custom other = (context.ContextOuterClass.ConfigRule_Custom) obj;
+      context.ContextOuterClass.ConfigRule_ACL other = (context.ContextOuterClass.ConfigRule_ACL) obj;
 
-      if (!getResourceKey()
-          .equals(other.getResourceKey())) return false;
-      if (!getResourceValue()
-          .equals(other.getResourceValue())) return false;
+      if (hasEndpointId() != other.hasEndpointId()) return false;
+      if (hasEndpointId()) {
+        if (!getEndpointId()
+            .equals(other.getEndpointId())) return false;
+      }
+      if (hasRuleSet() != other.hasRuleSet()) return false;
+      if (hasRuleSet()) {
+        if (!getRuleSet()
+            .equals(other.getRuleSet())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -47863,78 +49579,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + RESOURCE_KEY_FIELD_NUMBER;
-      hash = (53 * hash) + getResourceKey().hashCode();
-      hash = (37 * hash) + RESOURCE_VALUE_FIELD_NUMBER;
-      hash = (53 * hash) + getResourceValue().hashCode();
+      if (hasEndpointId()) {
+        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointId().hashCode();
+      }
+      if (hasRuleSet()) {
+        hash = (37 * hash) + RULE_SET_FIELD_NUMBER;
+        hash = (53 * hash) + getRuleSet().hashCode();
+      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConfigRule_ACL parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseDelimitedFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -47947,7 +49667,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConfigRule_Custom prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConfigRule_ACL prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -47963,26 +49683,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConfigRule_Custom}
+     * Protobuf type {@code context.ConfigRule_ACL}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConfigRule_Custom)
-        context.ContextOuterClass.ConfigRule_CustomOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConfigRule_ACL)
+        context.ContextOuterClass.ConfigRule_ACLOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConfigRule_Custom.class, context.ContextOuterClass.ConfigRule_Custom.Builder.class);
+                context.ContextOuterClass.ConfigRule_ACL.class, context.ContextOuterClass.ConfigRule_ACL.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConfigRule_Custom.newBuilder()
+      // Construct using context.ContextOuterClass.ConfigRule_ACL.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -48000,38 +49720,54 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        resourceKey_ = "";
-
-        resourceValue_ = "";
-
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+        if (ruleSetBuilder_ == null) {
+          ruleSet_ = null;
+        } else {
+          ruleSet_ = null;
+          ruleSetBuilder_ = null;
+        }
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_Custom getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
+      public context.ContextOuterClass.ConfigRule_ACL getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_Custom build() {
-        context.ContextOuterClass.ConfigRule_Custom result = buildPartial();
+      public context.ContextOuterClass.ConfigRule_ACL build() {
+        context.ContextOuterClass.ConfigRule_ACL result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
-        return result;
-      }
-
-      @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_Custom buildPartial() {
-        context.ContextOuterClass.ConfigRule_Custom result = new context.ContextOuterClass.ConfigRule_Custom(this);
-        result.resourceKey_ = resourceKey_;
-        result.resourceValue_ = resourceValue_;
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule_ACL buildPartial() {
+        context.ContextOuterClass.ConfigRule_ACL result = new context.ContextOuterClass.ConfigRule_ACL(this);
+        if (endpointIdBuilder_ == null) {
+          result.endpointId_ = endpointId_;
+        } else {
+          result.endpointId_ = endpointIdBuilder_.build();
+        }
+        if (ruleSetBuilder_ == null) {
+          result.ruleSet_ = ruleSet_;
+        } else {
+          result.ruleSet_ = ruleSetBuilder_.build();
+        }
         onBuilt();
         return result;
       }
@@ -48070,23 +49806,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConfigRule_Custom) {
-          return mergeFrom((context.ContextOuterClass.ConfigRule_Custom)other);
+        if (other instanceof context.ContextOuterClass.ConfigRule_ACL) {
+          return mergeFrom((context.ContextOuterClass.ConfigRule_ACL)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConfigRule_Custom other) {
-        if (other == context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance()) return this;
-        if (!other.getResourceKey().isEmpty()) {
-          resourceKey_ = other.resourceKey_;
-          onChanged();
+      public Builder mergeFrom(context.ContextOuterClass.ConfigRule_ACL other) {
+        if (other == context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance()) return this;
+        if (other.hasEndpointId()) {
+          mergeEndpointId(other.getEndpointId());
         }
-        if (!other.getResourceValue().isEmpty()) {
-          resourceValue_ = other.resourceValue_;
-          onChanged();
+        if (other.hasRuleSet()) {
+          mergeRuleSet(other.getRuleSet());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -48103,11 +49837,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConfigRule_Custom parsedMessage = null;
+        context.ContextOuterClass.ConfigRule_ACL parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConfigRule_Custom) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConfigRule_ACL) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -48117,156 +49851,242 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private java.lang.Object resourceKey_ = "";
+      private context.ContextOuterClass.EndPointId endpointId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
       /**
-       * <code>string resource_key = 1;</code>
-       * @return The resourceKey.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return Whether the endpointId field is set.
        */
-      public java.lang.String getResourceKey() {
-        java.lang.Object ref = resourceKey_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          resourceKey_ = s;
-          return s;
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return The endpointId.
+       */
+      public context.ContextOuterClass.EndPointId getEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         } else {
-          return (java.lang.String) ref;
+          return endpointIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>string resource_key = 1;</code>
-       * @return The bytes for resourceKey.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public com.google.protobuf.ByteString
-          getResourceKeyBytes() {
-        java.lang.Object ref = resourceKey_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          resourceKey_ = b;
-          return b;
+      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          endpointId_ = value;
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          endpointIdBuilder_.setMessage(value);
         }
+
+        return this;
       }
       /**
-       * <code>string resource_key = 1;</code>
-       * @param value The resourceKey to set.
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setResourceKey(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        resourceKey_ = value;
-        onChanged();
+      public Builder setEndpointId(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = builderForValue.build();
+          onChanged();
+        } else {
+          endpointIdBuilder_.setMessage(builderForValue.build());
+        }
+
         return this;
       }
       /**
-       * <code>string resource_key = 1;</code>
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder clearResourceKey() {
-        
-        resourceKey_ = getDefaultInstance().getResourceKey();
-        onChanged();
+      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (endpointId_ != null) {
+            endpointId_ =
+              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+          } else {
+            endpointId_ = value;
+          }
+          onChanged();
+        } else {
+          endpointIdBuilder_.mergeFrom(value);
+        }
+
         return this;
       }
       /**
-       * <code>string resource_key = 1;</code>
-       * @param value The bytes for resourceKey to set.
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setResourceKeyBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+          onChanged();
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
         
-        resourceKey_ = value;
         onChanged();
+        return getEndpointIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+        if (endpointIdBuilder_ != null) {
+          return endpointIdBuilder_.getMessageOrBuilder();
+        } else {
+          return endpointId_ == null ?
+              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        }
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getEndpointIdFieldBuilder() {
+        if (endpointIdBuilder_ == null) {
+          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  getEndpointId(),
+                  getParentForChildren(),
+                  isClean());
+          endpointId_ = null;
+        }
+        return endpointIdBuilder_;
+      }
+
+      private acl.Acl.AclRuleSet ruleSet_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          acl.Acl.AclRuleSet, acl.Acl.AclRuleSet.Builder, acl.Acl.AclRuleSetOrBuilder> ruleSetBuilder_;
+      /**
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * @return Whether the ruleSet field is set.
+       */
+      public boolean hasRuleSet() {
+        return ruleSetBuilder_ != null || ruleSet_ != null;
+      }
+      /**
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * @return The ruleSet.
+       */
+      public acl.Acl.AclRuleSet getRuleSet() {
+        if (ruleSetBuilder_ == null) {
+          return ruleSet_ == null ? acl.Acl.AclRuleSet.getDefaultInstance() : ruleSet_;
+        } else {
+          return ruleSetBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       */
+      public Builder setRuleSet(acl.Acl.AclRuleSet value) {
+        if (ruleSetBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ruleSet_ = value;
+          onChanged();
+        } else {
+          ruleSetBuilder_.setMessage(value);
+        }
+
         return this;
       }
+      /**
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       */
+      public Builder setRuleSet(
+          acl.Acl.AclRuleSet.Builder builderForValue) {
+        if (ruleSetBuilder_ == null) {
+          ruleSet_ = builderForValue.build();
+          onChanged();
+        } else {
+          ruleSetBuilder_.setMessage(builderForValue.build());
+        }
 
-      private java.lang.Object resourceValue_ = "";
+        return this;
+      }
       /**
-       * <code>string resource_value = 2;</code>
-       * @return The resourceValue.
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
        */
-      public java.lang.String getResourceValue() {
-        java.lang.Object ref = resourceValue_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          resourceValue_ = s;
-          return s;
+      public Builder mergeRuleSet(acl.Acl.AclRuleSet value) {
+        if (ruleSetBuilder_ == null) {
+          if (ruleSet_ != null) {
+            ruleSet_ =
+              acl.Acl.AclRuleSet.newBuilder(ruleSet_).mergeFrom(value).buildPartial();
+          } else {
+            ruleSet_ = value;
+          }
+          onChanged();
         } else {
-          return (java.lang.String) ref;
+          ruleSetBuilder_.mergeFrom(value);
         }
+
+        return this;
       }
       /**
-       * <code>string resource_value = 2;</code>
-       * @return The bytes for resourceValue.
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
        */
-      public com.google.protobuf.ByteString
-          getResourceValueBytes() {
-        java.lang.Object ref = resourceValue_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          resourceValue_ = b;
-          return b;
+      public Builder clearRuleSet() {
+        if (ruleSetBuilder_ == null) {
+          ruleSet_ = null;
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          ruleSet_ = null;
+          ruleSetBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>string resource_value = 2;</code>
-       * @param value The resourceValue to set.
-       * @return This builder for chaining.
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
        */
-      public Builder setResourceValue(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        resourceValue_ = value;
+      public acl.Acl.AclRuleSet.Builder getRuleSetBuilder() {
+        
         onChanged();
-        return this;
+        return getRuleSetFieldBuilder().getBuilder();
       }
       /**
-       * <code>string resource_value = 2;</code>
-       * @return This builder for chaining.
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
        */
-      public Builder clearResourceValue() {
-        
-        resourceValue_ = getDefaultInstance().getResourceValue();
-        onChanged();
-        return this;
+      public acl.Acl.AclRuleSetOrBuilder getRuleSetOrBuilder() {
+        if (ruleSetBuilder_ != null) {
+          return ruleSetBuilder_.getMessageOrBuilder();
+        } else {
+          return ruleSet_ == null ?
+              acl.Acl.AclRuleSet.getDefaultInstance() : ruleSet_;
+        }
       }
       /**
-       * <code>string resource_value = 2;</code>
-       * @param value The bytes for resourceValue to set.
-       * @return This builder for chaining.
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
        */
-      public Builder setResourceValueBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        resourceValue_ = value;
-        onChanged();
-        return this;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          acl.Acl.AclRuleSet, acl.Acl.AclRuleSet.Builder, acl.Acl.AclRuleSetOrBuilder> 
+          getRuleSetFieldBuilder() {
+        if (ruleSetBuilder_ == null) {
+          ruleSetBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              acl.Acl.AclRuleSet, acl.Acl.AclRuleSet.Builder, acl.Acl.AclRuleSetOrBuilder>(
+                  getRuleSet(),
+                  getParentForChildren(),
+                  isClean());
+          ruleSet_ = null;
+        }
+        return ruleSetBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -48281,100 +50101,114 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConfigRule_Custom)
+      // @@protoc_insertion_point(builder_scope:context.ConfigRule_ACL)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConfigRule_Custom)
-    private static final context.ContextOuterClass.ConfigRule_Custom DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConfigRule_ACL)
+    private static final context.ContextOuterClass.ConfigRule_ACL DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule_Custom();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule_ACL();
     }
 
-    public static context.ContextOuterClass.ConfigRule_Custom getDefaultInstance() {
+    public static context.ContextOuterClass.ConfigRule_ACL getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConfigRule_Custom>
-        PARSER = new com.google.protobuf.AbstractParser<ConfigRule_Custom>() {
+    private static final com.google.protobuf.Parser<ConfigRule_ACL>
+        PARSER = new com.google.protobuf.AbstractParser<ConfigRule_ACL>() {
       @java.lang.Override
-      public ConfigRule_Custom parsePartialFrom(
+      public ConfigRule_ACL parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConfigRule_Custom(input, extensionRegistry);
+        return new ConfigRule_ACL(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConfigRule_Custom> parser() {
+    public static com.google.protobuf.Parser<ConfigRule_ACL> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConfigRule_Custom> getParserForType() {
+    public com.google.protobuf.Parser<ConfigRule_ACL> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule_Custom getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConfigRule_ACL getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConfigRule_ACLOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConfigRule_ACL)
+  public interface ConfigRuleOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConfigRule)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return Whether the endpointId field is set.
+     * <code>.context.ConfigActionEnum action = 1;</code>
+     * @return The enum numeric value on the wire for action.
      */
-    boolean hasEndpointId();
+    int getActionValue();
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return The endpointId.
+     * <code>.context.ConfigActionEnum action = 1;</code>
+     * @return The action.
      */
-    context.ContextOuterClass.EndPointId getEndpointId();
+    context.ContextOuterClass.ConfigActionEnum getAction();
+
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     * @return Whether the custom field is set.
      */
-    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
+    boolean hasCustom();
+    /**
+     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     * @return The custom.
+     */
+    context.ContextOuterClass.ConfigRule_Custom getCustom();
+    /**
+     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     */
+    context.ContextOuterClass.ConfigRule_CustomOrBuilder getCustomOrBuilder();
 
     /**
-     * <code>.acl.AclRuleSet rule_set = 2;</code>
-     * @return Whether the ruleSet field is set.
+     * <code>.context.ConfigRule_ACL acl = 3;</code>
+     * @return Whether the acl field is set.
      */
-    boolean hasRuleSet();
+    boolean hasAcl();
     /**
-     * <code>.acl.AclRuleSet rule_set = 2;</code>
-     * @return The ruleSet.
+     * <code>.context.ConfigRule_ACL acl = 3;</code>
+     * @return The acl.
      */
-    acl.Acl.AclRuleSet getRuleSet();
+    context.ContextOuterClass.ConfigRule_ACL getAcl();
     /**
-     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     * <code>.context.ConfigRule_ACL acl = 3;</code>
      */
-    acl.Acl.AclRuleSetOrBuilder getRuleSetOrBuilder();
+    context.ContextOuterClass.ConfigRule_ACLOrBuilder getAclOrBuilder();
+
+    public context.ContextOuterClass.ConfigRule.ConfigRuleCase getConfigRuleCase();
   }
   /**
-   * Protobuf type {@code context.ConfigRule_ACL}
+   * Protobuf type {@code context.ConfigRule}
    */
-  public static final class ConfigRule_ACL extends
+  public static final class ConfigRule extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConfigRule_ACL)
-      ConfigRule_ACLOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConfigRule)
+      ConfigRuleOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConfigRule_ACL.newBuilder() to construct.
-    private ConfigRule_ACL(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConfigRule.newBuilder() to construct.
+    private ConfigRule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConfigRule_ACL() {
+    private ConfigRule() {
+      action_ = 0;
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConfigRule_ACL();
+      return new ConfigRule();
     }
 
     @java.lang.Override
@@ -48382,7 +50216,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConfigRule_ACL(
+    private ConfigRule(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -48400,30 +50234,38 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 10: {
-              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
-              if (endpointId_ != null) {
-                subBuilder = endpointId_.toBuilder();
+            case 8: {
+              int rawValue = input.readEnum();
+
+              action_ = rawValue;
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.ConfigRule_Custom.Builder subBuilder = null;
+              if (configRuleCase_ == 2) {
+                subBuilder = ((context.ContextOuterClass.ConfigRule_Custom) configRule_).toBuilder();
               }
-              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+              configRule_ =
+                  input.readMessage(context.ContextOuterClass.ConfigRule_Custom.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(endpointId_);
-                endpointId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom((context.ContextOuterClass.ConfigRule_Custom) configRule_);
+                configRule_ = subBuilder.buildPartial();
               }
-
+              configRuleCase_ = 2;
               break;
             }
-            case 18: {
-              acl.Acl.AclRuleSet.Builder subBuilder = null;
-              if (ruleSet_ != null) {
-                subBuilder = ruleSet_.toBuilder();
+            case 26: {
+              context.ContextOuterClass.ConfigRule_ACL.Builder subBuilder = null;
+              if (configRuleCase_ == 3) {
+                subBuilder = ((context.ContextOuterClass.ConfigRule_ACL) configRule_).toBuilder();
               }
-              ruleSet_ = input.readMessage(acl.Acl.AclRuleSet.parser(), extensionRegistry);
+              configRule_ =
+                  input.readMessage(context.ContextOuterClass.ConfigRule_ACL.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(ruleSet_);
-                ruleSet_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom((context.ContextOuterClass.ConfigRule_ACL) configRule_);
+                configRule_ = subBuilder.buildPartial();
               }
-
+              configRuleCase_ = 3;
               break;
             }
             default: {
@@ -48435,79 +50277,149 @@ public final class ContextOuterClass {
             }
           }
         }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ConfigRule_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ConfigRule.class, context.ContextOuterClass.ConfigRule.Builder.class);
+    }
+
+    private int configRuleCase_ = 0;
+    private java.lang.Object configRule_;
+    public enum ConfigRuleCase
+        implements com.google.protobuf.Internal.EnumLite,
+            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+      CUSTOM(2),
+      ACL(3),
+      CONFIGRULE_NOT_SET(0);
+      private final int value;
+      private ConfigRuleCase(int value) {
+        this.value = value;
+      }
+      /**
+       * @param value The number of the enum to look for.
+       * @return The enum associated with the given number.
+       * @deprecated Use {@link #forNumber(int)} instead.
+       */
+      @java.lang.Deprecated
+      public static ConfigRuleCase valueOf(int value) {
+        return forNumber(value);
+      }
+
+      public static ConfigRuleCase forNumber(int value) {
+        switch (value) {
+          case 2: return CUSTOM;
+          case 3: return ACL;
+          case 0: return CONFIGRULE_NOT_SET;
+          default: return null;
+        }
       }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_descriptor;
+      public int getNumber() {
+        return this.value;
+      }
+    };
+
+    public ConfigRuleCase
+    getConfigRuleCase() {
+      return ConfigRuleCase.forNumber(
+          configRuleCase_);
     }
 
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConfigRule_ACL.class, context.ContextOuterClass.ConfigRule_ACL.Builder.class);
+    public static final int ACTION_FIELD_NUMBER = 1;
+    private int action_;
+    /**
+     * <code>.context.ConfigActionEnum action = 1;</code>
+     * @return The enum numeric value on the wire for action.
+     */
+    @java.lang.Override public int getActionValue() {
+      return action_;
+    }
+    /**
+     * <code>.context.ConfigActionEnum action = 1;</code>
+     * @return The action.
+     */
+    @java.lang.Override public context.ContextOuterClass.ConfigActionEnum getAction() {
+      @SuppressWarnings("deprecation")
+      context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.valueOf(action_);
+      return result == null ? context.ContextOuterClass.ConfigActionEnum.UNRECOGNIZED : result;
     }
 
-    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.EndPointId endpointId_;
+    public static final int CUSTOM_FIELD_NUMBER = 2;
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return Whether the endpointId field is set.
+     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     * @return Whether the custom field is set.
      */
     @java.lang.Override
-    public boolean hasEndpointId() {
-      return endpointId_ != null;
+    public boolean hasCustom() {
+      return configRuleCase_ == 2;
     }
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return The endpointId.
+     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     * @return The custom.
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPointId getEndpointId() {
-      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+    public context.ContextOuterClass.ConfigRule_Custom getCustom() {
+      if (configRuleCase_ == 2) {
+         return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
+      }
+      return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
     }
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * <code>.context.ConfigRule_Custom custom = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-      return getEndpointId();
+    public context.ContextOuterClass.ConfigRule_CustomOrBuilder getCustomOrBuilder() {
+      if (configRuleCase_ == 2) {
+         return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
+      }
+      return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
     }
 
-    public static final int RULE_SET_FIELD_NUMBER = 2;
-    private acl.Acl.AclRuleSet ruleSet_;
+    public static final int ACL_FIELD_NUMBER = 3;
     /**
-     * <code>.acl.AclRuleSet rule_set = 2;</code>
-     * @return Whether the ruleSet field is set.
+     * <code>.context.ConfigRule_ACL acl = 3;</code>
+     * @return Whether the acl field is set.
      */
     @java.lang.Override
-    public boolean hasRuleSet() {
-      return ruleSet_ != null;
+    public boolean hasAcl() {
+      return configRuleCase_ == 3;
     }
     /**
-     * <code>.acl.AclRuleSet rule_set = 2;</code>
-     * @return The ruleSet.
+     * <code>.context.ConfigRule_ACL acl = 3;</code>
+     * @return The acl.
      */
     @java.lang.Override
-    public acl.Acl.AclRuleSet getRuleSet() {
-      return ruleSet_ == null ? acl.Acl.AclRuleSet.getDefaultInstance() : ruleSet_;
+    public context.ContextOuterClass.ConfigRule_ACL getAcl() {
+      if (configRuleCase_ == 3) {
+         return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
+      }
+      return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
     }
     /**
-     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     * <code>.context.ConfigRule_ACL acl = 3;</code>
      */
     @java.lang.Override
-    public acl.Acl.AclRuleSetOrBuilder getRuleSetOrBuilder() {
-      return getRuleSet();
+    public context.ContextOuterClass.ConfigRule_ACLOrBuilder getAclOrBuilder() {
+      if (configRuleCase_ == 3) {
+         return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
+      }
+      return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -48524,11 +50436,14 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (endpointId_ != null) {
-        output.writeMessage(1, getEndpointId());
+      if (action_ != context.ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED.getNumber()) {
+        output.writeEnum(1, action_);
       }
-      if (ruleSet_ != null) {
-        output.writeMessage(2, getRuleSet());
+      if (configRuleCase_ == 2) {
+        output.writeMessage(2, (context.ContextOuterClass.ConfigRule_Custom) configRule_);
+      }
+      if (configRuleCase_ == 3) {
+        output.writeMessage(3, (context.ContextOuterClass.ConfigRule_ACL) configRule_);
       }
       unknownFields.writeTo(output);
     }
@@ -48539,13 +50454,17 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (endpointId_ != null) {
+      if (action_ != context.ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED.getNumber()) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEndpointId());
+          .computeEnumSize(1, action_);
       }
-      if (ruleSet_ != null) {
+      if (configRuleCase_ == 2) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getRuleSet());
+          .computeMessageSize(2, (context.ContextOuterClass.ConfigRule_Custom) configRule_);
+      }
+      if (configRuleCase_ == 3) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, (context.ContextOuterClass.ConfigRule_ACL) configRule_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -48557,20 +50476,24 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConfigRule_ACL)) {
+      if (!(obj instanceof context.ContextOuterClass.ConfigRule)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConfigRule_ACL other = (context.ContextOuterClass.ConfigRule_ACL) obj;
+      context.ContextOuterClass.ConfigRule other = (context.ContextOuterClass.ConfigRule) obj;
 
-      if (hasEndpointId() != other.hasEndpointId()) return false;
-      if (hasEndpointId()) {
-        if (!getEndpointId()
-            .equals(other.getEndpointId())) return false;
-      }
-      if (hasRuleSet() != other.hasRuleSet()) return false;
-      if (hasRuleSet()) {
-        if (!getRuleSet()
-            .equals(other.getRuleSet())) return false;
+      if (action_ != other.action_) return false;
+      if (!getConfigRuleCase().equals(other.getConfigRuleCase())) return false;
+      switch (configRuleCase_) {
+        case 2:
+          if (!getCustom()
+              .equals(other.getCustom())) return false;
+          break;
+        case 3:
+          if (!getAcl()
+              .equals(other.getAcl())) return false;
+          break;
+        case 0:
+        default:
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -48583,82 +50506,88 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasEndpointId()) {
-        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getEndpointId().hashCode();
-      }
-      if (hasRuleSet()) {
-        hash = (37 * hash) + RULE_SET_FIELD_NUMBER;
-        hash = (53 * hash) + getRuleSet().hashCode();
+      hash = (37 * hash) + ACTION_FIELD_NUMBER;
+      hash = (53 * hash) + action_;
+      switch (configRuleCase_) {
+        case 2:
+          hash = (37 * hash) + CUSTOM_FIELD_NUMBER;
+          hash = (53 * hash) + getCustom().hashCode();
+          break;
+        case 3:
+          hash = (37 * hash) + ACL_FIELD_NUMBER;
+          hash = (53 * hash) + getAcl().hashCode();
+          break;
+        case 0:
+        default:
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConfigRule parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConfigRule parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConfigRule parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseDelimitedFrom(
+    public static context.ContextOuterClass.ConfigRule parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -48671,7 +50600,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConfigRule_ACL prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConfigRule prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -48687,26 +50616,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConfigRule_ACL}
+     * Protobuf type {@code context.ConfigRule}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConfigRule_ACL)
-        context.ContextOuterClass.ConfigRule_ACLOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConfigRule)
+        context.ContextOuterClass.ConfigRuleOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConfigRule_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConfigRule_ACL.class, context.ContextOuterClass.ConfigRule_ACL.Builder.class);
+                context.ContextOuterClass.ConfigRule.class, context.ContextOuterClass.ConfigRule.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConfigRule_ACL.newBuilder()
+      // Construct using context.ContextOuterClass.ConfigRule.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -48724,54 +50653,52 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = null;
-        } else {
-          endpointId_ = null;
-          endpointIdBuilder_ = null;
-        }
-        if (ruleSetBuilder_ == null) {
-          ruleSet_ = null;
-        } else {
-          ruleSet_ = null;
-          ruleSetBuilder_ = null;
-        }
+        action_ = 0;
+
+        configRuleCase_ = 0;
+        configRule_ = null;
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_ACL getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
+      public context.ContextOuterClass.ConfigRule getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConfigRule.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_ACL build() {
-        context.ContextOuterClass.ConfigRule_ACL result = buildPartial();
+      public context.ContextOuterClass.ConfigRule build() {
+        context.ContextOuterClass.ConfigRule result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
-      }
-
-      @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_ACL buildPartial() {
-        context.ContextOuterClass.ConfigRule_ACL result = new context.ContextOuterClass.ConfigRule_ACL(this);
-        if (endpointIdBuilder_ == null) {
-          result.endpointId_ = endpointId_;
-        } else {
-          result.endpointId_ = endpointIdBuilder_.build();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule buildPartial() {
+        context.ContextOuterClass.ConfigRule result = new context.ContextOuterClass.ConfigRule(this);
+        result.action_ = action_;
+        if (configRuleCase_ == 2) {
+          if (customBuilder_ == null) {
+            result.configRule_ = configRule_;
+          } else {
+            result.configRule_ = customBuilder_.build();
+          }
         }
-        if (ruleSetBuilder_ == null) {
-          result.ruleSet_ = ruleSet_;
-        } else {
-          result.ruleSet_ = ruleSetBuilder_.build();
+        if (configRuleCase_ == 3) {
+          if (aclBuilder_ == null) {
+            result.configRule_ = configRule_;
+          } else {
+            result.configRule_ = aclBuilder_.build();
+          }
         }
+        result.configRuleCase_ = configRuleCase_;
         onBuilt();
         return result;
       }
@@ -48810,21 +50737,31 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConfigRule_ACL) {
-          return mergeFrom((context.ContextOuterClass.ConfigRule_ACL)other);
+        if (other instanceof context.ContextOuterClass.ConfigRule) {
+          return mergeFrom((context.ContextOuterClass.ConfigRule)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConfigRule_ACL other) {
-        if (other == context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance()) return this;
-        if (other.hasEndpointId()) {
-          mergeEndpointId(other.getEndpointId());
+      public Builder mergeFrom(context.ContextOuterClass.ConfigRule other) {
+        if (other == context.ContextOuterClass.ConfigRule.getDefaultInstance()) return this;
+        if (other.action_ != 0) {
+          setActionValue(other.getActionValue());
         }
-        if (other.hasRuleSet()) {
-          mergeRuleSet(other.getRuleSet());
+        switch (other.getConfigRuleCase()) {
+          case CUSTOM: {
+            mergeCustom(other.getCustom());
+            break;
+          }
+          case ACL: {
+            mergeAcl(other.getAcl());
+            break;
+          }
+          case CONFIGRULE_NOT_SET: {
+            break;
+          }
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -48841,11 +50778,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConfigRule_ACL parsedMessage = null;
+        context.ContextOuterClass.ConfigRule parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConfigRule_ACL) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConfigRule) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -48854,243 +50791,356 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int configRuleCase_ = 0;
+      private java.lang.Object configRule_;
+      public ConfigRuleCase
+          getConfigRuleCase() {
+        return ConfigRuleCase.forNumber(
+            configRuleCase_);
+      }
+
+      public Builder clearConfigRule() {
+        configRuleCase_ = 0;
+        configRule_ = null;
+        onChanged();
+        return this;
+      }
+
+
+      private int action_ = 0;
+      /**
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @return The enum numeric value on the wire for action.
+       */
+      @java.lang.Override public int getActionValue() {
+        return action_;
+      }
+      /**
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @param value The enum numeric value on the wire for action to set.
+       * @return This builder for chaining.
+       */
+      public Builder setActionValue(int value) {
+        
+        action_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @return The action.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigActionEnum getAction() {
+        @SuppressWarnings("deprecation")
+        context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.valueOf(action_);
+        return result == null ? context.ContextOuterClass.ConfigActionEnum.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @param value The action to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAction(context.ContextOuterClass.ConfigActionEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        action_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAction() {
+        
+        action_ = 0;
+        onChanged();
+        return this;
+      }
 
-      private context.ContextOuterClass.EndPointId endpointId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
+          context.ContextOuterClass.ConfigRule_Custom, context.ContextOuterClass.ConfigRule_Custom.Builder, context.ContextOuterClass.ConfigRule_CustomOrBuilder> customBuilder_;
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       * @return Whether the endpointId field is set.
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
+       * @return Whether the custom field is set.
        */
-      public boolean hasEndpointId() {
-        return endpointIdBuilder_ != null || endpointId_ != null;
+      @java.lang.Override
+      public boolean hasCustom() {
+        return configRuleCase_ == 2;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       * @return The endpointId.
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
+       * @return The custom.
        */
-      public context.ContextOuterClass.EndPointId getEndpointId() {
-        if (endpointIdBuilder_ == null) {
-          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule_Custom getCustom() {
+        if (customBuilder_ == null) {
+          if (configRuleCase_ == 2) {
+            return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
+          }
+          return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
         } else {
-          return endpointIdBuilder_.getMessage();
+          if (configRuleCase_ == 2) {
+            return customBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
        */
-      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
-        if (endpointIdBuilder_ == null) {
+      public Builder setCustom(context.ContextOuterClass.ConfigRule_Custom value) {
+        if (customBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          endpointId_ = value;
+          configRule_ = value;
           onChanged();
         } else {
-          endpointIdBuilder_.setMessage(value);
+          customBuilder_.setMessage(value);
         }
-
+        configRuleCase_ = 2;
         return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
        */
-      public Builder setEndpointId(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = builderForValue.build();
+      public Builder setCustom(
+          context.ContextOuterClass.ConfigRule_Custom.Builder builderForValue) {
+        if (customBuilder_ == null) {
+          configRule_ = builderForValue.build();
           onChanged();
         } else {
-          endpointIdBuilder_.setMessage(builderForValue.build());
+          customBuilder_.setMessage(builderForValue.build());
         }
-
+        configRuleCase_ = 2;
         return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
        */
-      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
-        if (endpointIdBuilder_ == null) {
-          if (endpointId_ != null) {
-            endpointId_ =
-              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+      public Builder mergeCustom(context.ContextOuterClass.ConfigRule_Custom value) {
+        if (customBuilder_ == null) {
+          if (configRuleCase_ == 2 &&
+              configRule_ != context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance()) {
+            configRule_ = context.ContextOuterClass.ConfigRule_Custom.newBuilder((context.ContextOuterClass.ConfigRule_Custom) configRule_)
+                .mergeFrom(value).buildPartial();
           } else {
-            endpointId_ = value;
+            configRule_ = value;
           }
           onChanged();
         } else {
-          endpointIdBuilder_.mergeFrom(value);
+          if (configRuleCase_ == 2) {
+            customBuilder_.mergeFrom(value);
+          }
+          customBuilder_.setMessage(value);
         }
-
+        configRuleCase_ = 2;
         return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
        */
-      public Builder clearEndpointId() {
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = null;
-          onChanged();
+      public Builder clearCustom() {
+        if (customBuilder_ == null) {
+          if (configRuleCase_ == 2) {
+            configRuleCase_ = 0;
+            configRule_ = null;
+            onChanged();
+          }
         } else {
-          endpointId_ = null;
-          endpointIdBuilder_ = null;
+          if (configRuleCase_ == 2) {
+            configRuleCase_ = 0;
+            configRule_ = null;
+          }
+          customBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
-        
-        onChanged();
-        return getEndpointIdFieldBuilder().getBuilder();
+      public context.ContextOuterClass.ConfigRule_Custom.Builder getCustomBuilder() {
+        return getCustomFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
        */
-      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-        if (endpointIdBuilder_ != null) {
-          return endpointIdBuilder_.getMessageOrBuilder();
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule_CustomOrBuilder getCustomOrBuilder() {
+        if ((configRuleCase_ == 2) && (customBuilder_ != null)) {
+          return customBuilder_.getMessageOrBuilder();
         } else {
-          return endpointId_ == null ?
-              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+          if (configRuleCase_ == 2) {
+            return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
+          }
+          return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
         }
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getEndpointIdFieldBuilder() {
-        if (endpointIdBuilder_ == null) {
-          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  getEndpointId(),
+      }
+      /**
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConfigRule_Custom, context.ContextOuterClass.ConfigRule_Custom.Builder, context.ContextOuterClass.ConfigRule_CustomOrBuilder> 
+          getCustomFieldBuilder() {
+        if (customBuilder_ == null) {
+          if (!(configRuleCase_ == 2)) {
+            configRule_ = context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
+          }
+          customBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConfigRule_Custom, context.ContextOuterClass.ConfigRule_Custom.Builder, context.ContextOuterClass.ConfigRule_CustomOrBuilder>(
+                  (context.ContextOuterClass.ConfigRule_Custom) configRule_,
                   getParentForChildren(),
                   isClean());
-          endpointId_ = null;
+          configRule_ = null;
         }
-        return endpointIdBuilder_;
+        configRuleCase_ = 2;
+        onChanged();;
+        return customBuilder_;
       }
 
-      private acl.Acl.AclRuleSet ruleSet_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          acl.Acl.AclRuleSet, acl.Acl.AclRuleSet.Builder, acl.Acl.AclRuleSetOrBuilder> ruleSetBuilder_;
+          context.ContextOuterClass.ConfigRule_ACL, context.ContextOuterClass.ConfigRule_ACL.Builder, context.ContextOuterClass.ConfigRule_ACLOrBuilder> aclBuilder_;
       /**
-       * <code>.acl.AclRuleSet rule_set = 2;</code>
-       * @return Whether the ruleSet field is set.
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       * @return Whether the acl field is set.
        */
-      public boolean hasRuleSet() {
-        return ruleSetBuilder_ != null || ruleSet_ != null;
+      @java.lang.Override
+      public boolean hasAcl() {
+        return configRuleCase_ == 3;
       }
       /**
-       * <code>.acl.AclRuleSet rule_set = 2;</code>
-       * @return The ruleSet.
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       * @return The acl.
        */
-      public acl.Acl.AclRuleSet getRuleSet() {
-        if (ruleSetBuilder_ == null) {
-          return ruleSet_ == null ? acl.Acl.AclRuleSet.getDefaultInstance() : ruleSet_;
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule_ACL getAcl() {
+        if (aclBuilder_ == null) {
+          if (configRuleCase_ == 3) {
+            return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
+          }
+          return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
         } else {
-          return ruleSetBuilder_.getMessage();
+          if (configRuleCase_ == 3) {
+            return aclBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
         }
       }
       /**
-       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
-      public Builder setRuleSet(acl.Acl.AclRuleSet value) {
-        if (ruleSetBuilder_ == null) {
+      public Builder setAcl(context.ContextOuterClass.ConfigRule_ACL value) {
+        if (aclBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ruleSet_ = value;
+          configRule_ = value;
           onChanged();
         } else {
-          ruleSetBuilder_.setMessage(value);
+          aclBuilder_.setMessage(value);
         }
-
+        configRuleCase_ = 3;
         return this;
       }
       /**
-       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
-      public Builder setRuleSet(
-          acl.Acl.AclRuleSet.Builder builderForValue) {
-        if (ruleSetBuilder_ == null) {
-          ruleSet_ = builderForValue.build();
+      public Builder setAcl(
+          context.ContextOuterClass.ConfigRule_ACL.Builder builderForValue) {
+        if (aclBuilder_ == null) {
+          configRule_ = builderForValue.build();
           onChanged();
         } else {
-          ruleSetBuilder_.setMessage(builderForValue.build());
+          aclBuilder_.setMessage(builderForValue.build());
         }
-
+        configRuleCase_ = 3;
         return this;
       }
       /**
-       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
-      public Builder mergeRuleSet(acl.Acl.AclRuleSet value) {
-        if (ruleSetBuilder_ == null) {
-          if (ruleSet_ != null) {
-            ruleSet_ =
-              acl.Acl.AclRuleSet.newBuilder(ruleSet_).mergeFrom(value).buildPartial();
+      public Builder mergeAcl(context.ContextOuterClass.ConfigRule_ACL value) {
+        if (aclBuilder_ == null) {
+          if (configRuleCase_ == 3 &&
+              configRule_ != context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance()) {
+            configRule_ = context.ContextOuterClass.ConfigRule_ACL.newBuilder((context.ContextOuterClass.ConfigRule_ACL) configRule_)
+                .mergeFrom(value).buildPartial();
           } else {
-            ruleSet_ = value;
+            configRule_ = value;
           }
           onChanged();
         } else {
-          ruleSetBuilder_.mergeFrom(value);
+          if (configRuleCase_ == 3) {
+            aclBuilder_.mergeFrom(value);
+          }
+          aclBuilder_.setMessage(value);
         }
-
+        configRuleCase_ = 3;
         return this;
       }
       /**
-       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
-      public Builder clearRuleSet() {
-        if (ruleSetBuilder_ == null) {
-          ruleSet_ = null;
-          onChanged();
+      public Builder clearAcl() {
+        if (aclBuilder_ == null) {
+          if (configRuleCase_ == 3) {
+            configRuleCase_ = 0;
+            configRule_ = null;
+            onChanged();
+          }
         } else {
-          ruleSet_ = null;
-          ruleSetBuilder_ = null;
+          if (configRuleCase_ == 3) {
+            configRuleCase_ = 0;
+            configRule_ = null;
+          }
+          aclBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
-      public acl.Acl.AclRuleSet.Builder getRuleSetBuilder() {
-        
-        onChanged();
-        return getRuleSetFieldBuilder().getBuilder();
+      public context.ContextOuterClass.ConfigRule_ACL.Builder getAclBuilder() {
+        return getAclFieldBuilder().getBuilder();
       }
       /**
-       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
-      public acl.Acl.AclRuleSetOrBuilder getRuleSetOrBuilder() {
-        if (ruleSetBuilder_ != null) {
-          return ruleSetBuilder_.getMessageOrBuilder();
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule_ACLOrBuilder getAclOrBuilder() {
+        if ((configRuleCase_ == 3) && (aclBuilder_ != null)) {
+          return aclBuilder_.getMessageOrBuilder();
         } else {
-          return ruleSet_ == null ?
-              acl.Acl.AclRuleSet.getDefaultInstance() : ruleSet_;
+          if (configRuleCase_ == 3) {
+            return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
+          }
+          return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
         }
       }
       /**
-       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          acl.Acl.AclRuleSet, acl.Acl.AclRuleSet.Builder, acl.Acl.AclRuleSetOrBuilder> 
-          getRuleSetFieldBuilder() {
-        if (ruleSetBuilder_ == null) {
-          ruleSetBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              acl.Acl.AclRuleSet, acl.Acl.AclRuleSet.Builder, acl.Acl.AclRuleSetOrBuilder>(
-                  getRuleSet(),
+          context.ContextOuterClass.ConfigRule_ACL, context.ContextOuterClass.ConfigRule_ACL.Builder, context.ContextOuterClass.ConfigRule_ACLOrBuilder> 
+          getAclFieldBuilder() {
+        if (aclBuilder_ == null) {
+          if (!(configRuleCase_ == 3)) {
+            configRule_ = context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
+          }
+          aclBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConfigRule_ACL, context.ContextOuterClass.ConfigRule_ACL.Builder, context.ContextOuterClass.ConfigRule_ACLOrBuilder>(
+                  (context.ContextOuterClass.ConfigRule_ACL) configRule_,
                   getParentForChildren(),
                   isClean());
-          ruleSet_ = null;
+          configRule_ = null;
         }
-        return ruleSetBuilder_;
+        configRuleCase_ = 3;
+        onChanged();;
+        return aclBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -49105,114 +51155,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConfigRule_ACL)
+      // @@protoc_insertion_point(builder_scope:context.ConfigRule)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConfigRule_ACL)
-    private static final context.ContextOuterClass.ConfigRule_ACL DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConfigRule)
+    private static final context.ContextOuterClass.ConfigRule DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule_ACL();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule();
     }
 
-    public static context.ContextOuterClass.ConfigRule_ACL getDefaultInstance() {
+    public static context.ContextOuterClass.ConfigRule getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConfigRule_ACL>
-        PARSER = new com.google.protobuf.AbstractParser<ConfigRule_ACL>() {
+    private static final com.google.protobuf.Parser<ConfigRule>
+        PARSER = new com.google.protobuf.AbstractParser<ConfigRule>() {
       @java.lang.Override
-      public ConfigRule_ACL parsePartialFrom(
+      public ConfigRule parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConfigRule_ACL(input, extensionRegistry);
+        return new ConfigRule(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConfigRule_ACL> parser() {
+    public static com.google.protobuf.Parser<ConfigRule> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConfigRule_ACL> getParserForType() {
+    public com.google.protobuf.Parser<ConfigRule> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule_ACL getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConfigRule getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConfigRuleOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConfigRule)
+  public interface Constraint_CustomOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_Custom)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.ConfigActionEnum action = 1;</code>
-     * @return The enum numeric value on the wire for action.
-     */
-    int getActionValue();
-    /**
-     * <code>.context.ConfigActionEnum action = 1;</code>
-     * @return The action.
-     */
-    context.ContextOuterClass.ConfigActionEnum getAction();
-
-    /**
-     * <code>.context.ConfigRule_Custom custom = 2;</code>
-     * @return Whether the custom field is set.
-     */
-    boolean hasCustom();
-    /**
-     * <code>.context.ConfigRule_Custom custom = 2;</code>
-     * @return The custom.
+     * <code>string constraint_type = 1;</code>
+     * @return The constraintType.
      */
-    context.ContextOuterClass.ConfigRule_Custom getCustom();
+    java.lang.String getConstraintType();
     /**
-     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     * <code>string constraint_type = 1;</code>
+     * @return The bytes for constraintType.
      */
-    context.ContextOuterClass.ConfigRule_CustomOrBuilder getCustomOrBuilder();
+    com.google.protobuf.ByteString
+        getConstraintTypeBytes();
 
     /**
-     * <code>.context.ConfigRule_ACL acl = 3;</code>
-     * @return Whether the acl field is set.
-     */
-    boolean hasAcl();
-    /**
-     * <code>.context.ConfigRule_ACL acl = 3;</code>
-     * @return The acl.
+     * <code>string constraint_value = 2;</code>
+     * @return The constraintValue.
      */
-    context.ContextOuterClass.ConfigRule_ACL getAcl();
+    java.lang.String getConstraintValue();
     /**
-     * <code>.context.ConfigRule_ACL acl = 3;</code>
+     * <code>string constraint_value = 2;</code>
+     * @return The bytes for constraintValue.
      */
-    context.ContextOuterClass.ConfigRule_ACLOrBuilder getAclOrBuilder();
-
-    public context.ContextOuterClass.ConfigRule.ConfigRuleCase getConfigRuleCase();
+    com.google.protobuf.ByteString
+        getConstraintValueBytes();
   }
   /**
-   * Protobuf type {@code context.ConfigRule}
+   * <pre>
+   * ----- Constraint ----------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.Constraint_Custom}
    */
-  public static final class ConfigRule extends
+  public static final class Constraint_Custom extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConfigRule)
-      ConfigRuleOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use ConfigRule.newBuilder() to construct.
-    private ConfigRule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      // @@protoc_insertion_point(message_implements:context.Constraint_Custom)
+      Constraint_CustomOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Constraint_Custom.newBuilder() to construct.
+    private Constraint_Custom(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConfigRule() {
-      action_ = 0;
+    private Constraint_Custom() {
+      constraintType_ = "";
+      constraintValue_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConfigRule();
+      return new Constraint_Custom();
     }
 
     @java.lang.Override
@@ -49220,7 +51256,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConfigRule(
+    private Constraint_Custom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -49238,38 +51274,16 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 8: {
-              int rawValue = input.readEnum();
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
 
-              action_ = rawValue;
+              constraintType_ = s;
               break;
             }
             case 18: {
-              context.ContextOuterClass.ConfigRule_Custom.Builder subBuilder = null;
-              if (configRuleCase_ == 2) {
-                subBuilder = ((context.ContextOuterClass.ConfigRule_Custom) configRule_).toBuilder();
-              }
-              configRule_ =
-                  input.readMessage(context.ContextOuterClass.ConfigRule_Custom.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom((context.ContextOuterClass.ConfigRule_Custom) configRule_);
-                configRule_ = subBuilder.buildPartial();
-              }
-              configRuleCase_ = 2;
-              break;
-            }
-            case 26: {
-              context.ContextOuterClass.ConfigRule_ACL.Builder subBuilder = null;
-              if (configRuleCase_ == 3) {
-                subBuilder = ((context.ContextOuterClass.ConfigRule_ACL) configRule_).toBuilder();
-              }
-              configRule_ =
-                  input.readMessage(context.ContextOuterClass.ConfigRule_ACL.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom((context.ContextOuterClass.ConfigRule_ACL) configRule_);
-                configRule_ = subBuilder.buildPartial();
-              }
-              configRuleCase_ = 3;
+              java.lang.String s = input.readStringRequireUtf8();
+
+              constraintValue_ = s;
               break;
             }
             default: {
@@ -49293,137 +51307,91 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
+      return context.ContextOuterClass.internal_static_context_Constraint_Custom_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConfigRule_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Constraint_Custom_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConfigRule.class, context.ContextOuterClass.ConfigRule.Builder.class);
-    }
-
-    private int configRuleCase_ = 0;
-    private java.lang.Object configRule_;
-    public enum ConfigRuleCase
-        implements com.google.protobuf.Internal.EnumLite,
-            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
-      CUSTOM(2),
-      ACL(3),
-      CONFIGRULE_NOT_SET(0);
-      private final int value;
-      private ConfigRuleCase(int value) {
-        this.value = value;
-      }
-      /**
-       * @param value The number of the enum to look for.
-       * @return The enum associated with the given number.
-       * @deprecated Use {@link #forNumber(int)} instead.
-       */
-      @java.lang.Deprecated
-      public static ConfigRuleCase valueOf(int value) {
-        return forNumber(value);
-      }
-
-      public static ConfigRuleCase forNumber(int value) {
-        switch (value) {
-          case 2: return CUSTOM;
-          case 3: return ACL;
-          case 0: return CONFIGRULE_NOT_SET;
-          default: return null;
-        }
-      }
-      public int getNumber() {
-        return this.value;
-      }
-    };
-
-    public ConfigRuleCase
-    getConfigRuleCase() {
-      return ConfigRuleCase.forNumber(
-          configRuleCase_);
-    }
-
-    public static final int ACTION_FIELD_NUMBER = 1;
-    private int action_;
-    /**
-     * <code>.context.ConfigActionEnum action = 1;</code>
-     * @return The enum numeric value on the wire for action.
-     */
-    @java.lang.Override public int getActionValue() {
-      return action_;
-    }
-    /**
-     * <code>.context.ConfigActionEnum action = 1;</code>
-     * @return The action.
-     */
-    @java.lang.Override public context.ContextOuterClass.ConfigActionEnum getAction() {
-      @SuppressWarnings("deprecation")
-      context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.valueOf(action_);
-      return result == null ? context.ContextOuterClass.ConfigActionEnum.UNRECOGNIZED : result;
+              context.ContextOuterClass.Constraint_Custom.class, context.ContextOuterClass.Constraint_Custom.Builder.class);
     }
 
-    public static final int CUSTOM_FIELD_NUMBER = 2;
-    /**
-     * <code>.context.ConfigRule_Custom custom = 2;</code>
-     * @return Whether the custom field is set.
-     */
-    @java.lang.Override
-    public boolean hasCustom() {
-      return configRuleCase_ == 2;
-    }
+    public static final int CONSTRAINT_TYPE_FIELD_NUMBER = 1;
+    private volatile java.lang.Object constraintType_;
     /**
-     * <code>.context.ConfigRule_Custom custom = 2;</code>
-     * @return The custom.
+     * <code>string constraint_type = 1;</code>
+     * @return The constraintType.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule_Custom getCustom() {
-      if (configRuleCase_ == 2) {
-         return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
+    public java.lang.String getConstraintType() {
+      java.lang.Object ref = constraintType_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        constraintType_ = s;
+        return s;
       }
-      return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
     }
     /**
-     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     * <code>string constraint_type = 1;</code>
+     * @return The bytes for constraintType.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule_CustomOrBuilder getCustomOrBuilder() {
-      if (configRuleCase_ == 2) {
-         return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
+    public com.google.protobuf.ByteString
+        getConstraintTypeBytes() {
+      java.lang.Object ref = constraintType_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        constraintType_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
       }
-      return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
     }
 
-    public static final int ACL_FIELD_NUMBER = 3;
-    /**
-     * <code>.context.ConfigRule_ACL acl = 3;</code>
-     * @return Whether the acl field is set.
-     */
-    @java.lang.Override
-    public boolean hasAcl() {
-      return configRuleCase_ == 3;
-    }
+    public static final int CONSTRAINT_VALUE_FIELD_NUMBER = 2;
+    private volatile java.lang.Object constraintValue_;
     /**
-     * <code>.context.ConfigRule_ACL acl = 3;</code>
-     * @return The acl.
+     * <code>string constraint_value = 2;</code>
+     * @return The constraintValue.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule_ACL getAcl() {
-      if (configRuleCase_ == 3) {
-         return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
+    public java.lang.String getConstraintValue() {
+      java.lang.Object ref = constraintValue_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        constraintValue_ = s;
+        return s;
       }
-      return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
     }
     /**
-     * <code>.context.ConfigRule_ACL acl = 3;</code>
+     * <code>string constraint_value = 2;</code>
+     * @return The bytes for constraintValue.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule_ACLOrBuilder getAclOrBuilder() {
-      if (configRuleCase_ == 3) {
-         return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
+    public com.google.protobuf.ByteString
+        getConstraintValueBytes() {
+      java.lang.Object ref = constraintValue_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        constraintValue_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
       }
-      return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -49440,14 +51408,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (action_ != context.ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED.getNumber()) {
-        output.writeEnum(1, action_);
-      }
-      if (configRuleCase_ == 2) {
-        output.writeMessage(2, (context.ContextOuterClass.ConfigRule_Custom) configRule_);
+      if (!getConstraintTypeBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, constraintType_);
       }
-      if (configRuleCase_ == 3) {
-        output.writeMessage(3, (context.ContextOuterClass.ConfigRule_ACL) configRule_);
+      if (!getConstraintValueBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, constraintValue_);
       }
       unknownFields.writeTo(output);
     }
@@ -49458,47 +51423,31 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (action_ != context.ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED.getNumber()) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(1, action_);
-      }
-      if (configRuleCase_ == 2) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, (context.ContextOuterClass.ConfigRule_Custom) configRule_);
+      if (!getConstraintTypeBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, constraintType_);
       }
-      if (configRuleCase_ == 3) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, (context.ContextOuterClass.ConfigRule_ACL) configRule_);
+      if (!getConstraintValueBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, constraintValue_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof context.ContextOuterClass.ConfigRule)) {
-        return super.equals(obj);
-      }
-      context.ContextOuterClass.ConfigRule other = (context.ContextOuterClass.ConfigRule) obj;
-
-      if (action_ != other.action_) return false;
-      if (!getConfigRuleCase().equals(other.getConfigRuleCase())) return false;
-      switch (configRuleCase_) {
-        case 2:
-          if (!getCustom()
-              .equals(other.getCustom())) return false;
-          break;
-        case 3:
-          if (!getAcl()
-              .equals(other.getAcl())) return false;
-          break;
-        case 0:
-        default:
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.Constraint_Custom)) {
+        return super.equals(obj);
       }
+      context.ContextOuterClass.Constraint_Custom other = (context.ContextOuterClass.Constraint_Custom) obj;
+
+      if (!getConstraintType()
+          .equals(other.getConstraintType())) return false;
+      if (!getConstraintValue()
+          .equals(other.getConstraintValue())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -49510,88 +51459,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + ACTION_FIELD_NUMBER;
-      hash = (53 * hash) + action_;
-      switch (configRuleCase_) {
-        case 2:
-          hash = (37 * hash) + CUSTOM_FIELD_NUMBER;
-          hash = (53 * hash) + getCustom().hashCode();
-          break;
-        case 3:
-          hash = (37 * hash) + ACL_FIELD_NUMBER;
-          hash = (53 * hash) + getAcl().hashCode();
-          break;
-        case 0:
-        default:
-      }
+      hash = (37 * hash) + CONSTRAINT_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + getConstraintType().hashCode();
+      hash = (37 * hash) + CONSTRAINT_VALUE_FIELD_NUMBER;
+      hash = (53 * hash) + getConstraintValue().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(byte[] data)
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_Custom parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule parseDelimitedFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -49604,7 +51543,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConfigRule prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Constraint_Custom prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -49620,26 +51559,30 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConfigRule}
+     * <pre>
+     * ----- Constraint ----------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.Constraint_Custom}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConfigRule)
-        context.ContextOuterClass.ConfigRuleOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Constraint_Custom)
+        context.ContextOuterClass.Constraint_CustomOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_Custom_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Constraint_Custom_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConfigRule.class, context.ContextOuterClass.ConfigRule.Builder.class);
+                context.ContextOuterClass.Constraint_Custom.class, context.ContextOuterClass.Constraint_Custom.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConfigRule.newBuilder()
+      // Construct using context.ContextOuterClass.Constraint_Custom.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -49657,27 +51600,27 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        action_ = 0;
+        constraintType_ = "";
+
+        constraintValue_ = "";
 
-        configRuleCase_ = 0;
-        configRule_ = null;
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_Custom_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConfigRule.getDefaultInstance();
+      public context.ContextOuterClass.Constraint_Custom getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule build() {
-        context.ContextOuterClass.ConfigRule result = buildPartial();
+      public context.ContextOuterClass.Constraint_Custom build() {
+        context.ContextOuterClass.Constraint_Custom result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -49685,24 +51628,10 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule buildPartial() {
-        context.ContextOuterClass.ConfigRule result = new context.ContextOuterClass.ConfigRule(this);
-        result.action_ = action_;
-        if (configRuleCase_ == 2) {
-          if (customBuilder_ == null) {
-            result.configRule_ = configRule_;
-          } else {
-            result.configRule_ = customBuilder_.build();
-          }
-        }
-        if (configRuleCase_ == 3) {
-          if (aclBuilder_ == null) {
-            result.configRule_ = configRule_;
-          } else {
-            result.configRule_ = aclBuilder_.build();
-          }
-        }
-        result.configRuleCase_ = configRuleCase_;
+      public context.ContextOuterClass.Constraint_Custom buildPartial() {
+        context.ContextOuterClass.Constraint_Custom result = new context.ContextOuterClass.Constraint_Custom(this);
+        result.constraintType_ = constraintType_;
+        result.constraintValue_ = constraintValue_;
         onBuilt();
         return result;
       }
@@ -49738,413 +51667,206 @@ public final class ContextOuterClass {
           com.google.protobuf.Descriptors.FieldDescriptor field,
           java.lang.Object value) {
         return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConfigRule) {
-          return mergeFrom((context.ContextOuterClass.ConfigRule)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(context.ContextOuterClass.ConfigRule other) {
-        if (other == context.ContextOuterClass.ConfigRule.getDefaultInstance()) return this;
-        if (other.action_ != 0) {
-          setActionValue(other.getActionValue());
-        }
-        switch (other.getConfigRuleCase()) {
-          case CUSTOM: {
-            mergeCustom(other.getCustom());
-            break;
-          }
-          case ACL: {
-            mergeAcl(other.getAcl());
-            break;
-          }
-          case CONFIGRULE_NOT_SET: {
-            break;
-          }
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.ConfigRule parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConfigRule) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int configRuleCase_ = 0;
-      private java.lang.Object configRule_;
-      public ConfigRuleCase
-          getConfigRuleCase() {
-        return ConfigRuleCase.forNumber(
-            configRuleCase_);
-      }
-
-      public Builder clearConfigRule() {
-        configRuleCase_ = 0;
-        configRule_ = null;
-        onChanged();
-        return this;
-      }
-
-
-      private int action_ = 0;
-      /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @return The enum numeric value on the wire for action.
-       */
-      @java.lang.Override public int getActionValue() {
-        return action_;
-      }
-      /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @param value The enum numeric value on the wire for action to set.
-       * @return This builder for chaining.
-       */
-      public Builder setActionValue(int value) {
-        
-        action_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @return The action.
-       */
-      @java.lang.Override
-      public context.ContextOuterClass.ConfigActionEnum getAction() {
-        @SuppressWarnings("deprecation")
-        context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.valueOf(action_);
-        return result == null ? context.ContextOuterClass.ConfigActionEnum.UNRECOGNIZED : result;
-      }
-      /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @param value The action to set.
-       * @return This builder for chaining.
-       */
-      public Builder setAction(context.ContextOuterClass.ConfigActionEnum value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        
-        action_ = value.getNumber();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearAction() {
-        
-        action_ = 0;
-        onChanged();
-        return this;
-      }
-
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConfigRule_Custom, context.ContextOuterClass.ConfigRule_Custom.Builder, context.ContextOuterClass.ConfigRule_CustomOrBuilder> customBuilder_;
-      /**
-       * <code>.context.ConfigRule_Custom custom = 2;</code>
-       * @return Whether the custom field is set.
-       */
-      @java.lang.Override
-      public boolean hasCustom() {
-        return configRuleCase_ == 2;
-      }
-      /**
-       * <code>.context.ConfigRule_Custom custom = 2;</code>
-       * @return The custom.
-       */
+      }
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_Custom getCustom() {
-        if (customBuilder_ == null) {
-          if (configRuleCase_ == 2) {
-            return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
-          }
-          return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.Constraint_Custom) {
+          return mergeFrom((context.ContextOuterClass.Constraint_Custom)other);
         } else {
-          if (configRuleCase_ == 2) {
-            return customBuilder_.getMessage();
-          }
-          return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
+          super.mergeFrom(other);
+          return this;
         }
       }
-      /**
-       * <code>.context.ConfigRule_Custom custom = 2;</code>
-       */
-      public Builder setCustom(context.ContextOuterClass.ConfigRule_Custom value) {
-        if (customBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          configRule_ = value;
+
+      public Builder mergeFrom(context.ContextOuterClass.Constraint_Custom other) {
+        if (other == context.ContextOuterClass.Constraint_Custom.getDefaultInstance()) return this;
+        if (!other.getConstraintType().isEmpty()) {
+          constraintType_ = other.constraintType_;
           onChanged();
-        } else {
-          customBuilder_.setMessage(value);
         }
-        configRuleCase_ = 2;
-        return this;
-      }
-      /**
-       * <code>.context.ConfigRule_Custom custom = 2;</code>
-       */
-      public Builder setCustom(
-          context.ContextOuterClass.ConfigRule_Custom.Builder builderForValue) {
-        if (customBuilder_ == null) {
-          configRule_ = builderForValue.build();
+        if (!other.getConstraintValue().isEmpty()) {
+          constraintValue_ = other.constraintValue_;
           onChanged();
-        } else {
-          customBuilder_.setMessage(builderForValue.build());
         }
-        configRuleCase_ = 2;
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
         return this;
       }
-      /**
-       * <code>.context.ConfigRule_Custom custom = 2;</code>
-       */
-      public Builder mergeCustom(context.ContextOuterClass.ConfigRule_Custom value) {
-        if (customBuilder_ == null) {
-          if (configRuleCase_ == 2 &&
-              configRule_ != context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance()) {
-            configRule_ = context.ContextOuterClass.ConfigRule_Custom.newBuilder((context.ContextOuterClass.ConfigRule_Custom) configRule_)
-                .mergeFrom(value).buildPartial();
-          } else {
-            configRule_ = value;
-          }
-          onChanged();
-        } else {
-          if (configRuleCase_ == 2) {
-            customBuilder_.mergeFrom(value);
-          }
-          customBuilder_.setMessage(value);
-        }
-        configRuleCase_ = 2;
-        return this;
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-      /**
-       * <code>.context.ConfigRule_Custom custom = 2;</code>
-       */
-      public Builder clearCustom() {
-        if (customBuilder_ == null) {
-          if (configRuleCase_ == 2) {
-            configRuleCase_ = 0;
-            configRule_ = null;
-            onChanged();
-          }
-        } else {
-          if (configRuleCase_ == 2) {
-            configRuleCase_ = 0;
-            configRule_ = null;
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Constraint_Custom parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Constraint_Custom) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
-          customBuilder_.clear();
         }
         return this;
       }
+
+      private java.lang.Object constraintType_ = "";
       /**
-       * <code>.context.ConfigRule_Custom custom = 2;</code>
-       */
-      public context.ContextOuterClass.ConfigRule_Custom.Builder getCustomBuilder() {
-        return getCustomFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.ConfigRule_Custom custom = 2;</code>
+       * <code>string constraint_type = 1;</code>
+       * @return The constraintType.
        */
-      @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_CustomOrBuilder getCustomOrBuilder() {
-        if ((configRuleCase_ == 2) && (customBuilder_ != null)) {
-          return customBuilder_.getMessageOrBuilder();
+      public java.lang.String getConstraintType() {
+        java.lang.Object ref = constraintType_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          constraintType_ = s;
+          return s;
         } else {
-          if (configRuleCase_ == 2) {
-            return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
-          }
-          return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
+          return (java.lang.String) ref;
         }
       }
       /**
-       * <code>.context.ConfigRule_Custom custom = 2;</code>
+       * <code>string constraint_type = 1;</code>
+       * @return The bytes for constraintType.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConfigRule_Custom, context.ContextOuterClass.ConfigRule_Custom.Builder, context.ContextOuterClass.ConfigRule_CustomOrBuilder> 
-          getCustomFieldBuilder() {
-        if (customBuilder_ == null) {
-          if (!(configRuleCase_ == 2)) {
-            configRule_ = context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
-          }
-          customBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConfigRule_Custom, context.ContextOuterClass.ConfigRule_Custom.Builder, context.ContextOuterClass.ConfigRule_CustomOrBuilder>(
-                  (context.ContextOuterClass.ConfigRule_Custom) configRule_,
-                  getParentForChildren(),
-                  isClean());
-          configRule_ = null;
+      public com.google.protobuf.ByteString
+          getConstraintTypeBytes() {
+        java.lang.Object ref = constraintType_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          constraintType_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
         }
-        configRuleCase_ = 2;
-        onChanged();;
-        return customBuilder_;
-      }
-
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConfigRule_ACL, context.ContextOuterClass.ConfigRule_ACL.Builder, context.ContextOuterClass.ConfigRule_ACLOrBuilder> aclBuilder_;
-      /**
-       * <code>.context.ConfigRule_ACL acl = 3;</code>
-       * @return Whether the acl field is set.
-       */
-      @java.lang.Override
-      public boolean hasAcl() {
-        return configRuleCase_ == 3;
       }
       /**
-       * <code>.context.ConfigRule_ACL acl = 3;</code>
-       * @return The acl.
+       * <code>string constraint_type = 1;</code>
+       * @param value The constraintType to set.
+       * @return This builder for chaining.
        */
-      @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_ACL getAcl() {
-        if (aclBuilder_ == null) {
-          if (configRuleCase_ == 3) {
-            return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
-          }
-          return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
-        } else {
-          if (configRuleCase_ == 3) {
-            return aclBuilder_.getMessage();
-          }
-          return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
-        }
+      public Builder setConstraintType(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        constraintType_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       * <code>string constraint_type = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder setAcl(context.ContextOuterClass.ConfigRule_ACL value) {
-        if (aclBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          configRule_ = value;
-          onChanged();
-        } else {
-          aclBuilder_.setMessage(value);
-        }
-        configRuleCase_ = 3;
+      public Builder clearConstraintType() {
+        
+        constraintType_ = getDefaultInstance().getConstraintType();
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       * <code>string constraint_type = 1;</code>
+       * @param value The bytes for constraintType to set.
+       * @return This builder for chaining.
        */
-      public Builder setAcl(
-          context.ContextOuterClass.ConfigRule_ACL.Builder builderForValue) {
-        if (aclBuilder_ == null) {
-          configRule_ = builderForValue.build();
-          onChanged();
-        } else {
-          aclBuilder_.setMessage(builderForValue.build());
-        }
-        configRuleCase_ = 3;
+      public Builder setConstraintTypeBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        constraintType_ = value;
+        onChanged();
         return this;
       }
+
+      private java.lang.Object constraintValue_ = "";
       /**
-       * <code>.context.ConfigRule_ACL acl = 3;</code>
-       */
-      public Builder mergeAcl(context.ContextOuterClass.ConfigRule_ACL value) {
-        if (aclBuilder_ == null) {
-          if (configRuleCase_ == 3 &&
-              configRule_ != context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance()) {
-            configRule_ = context.ContextOuterClass.ConfigRule_ACL.newBuilder((context.ContextOuterClass.ConfigRule_ACL) configRule_)
-                .mergeFrom(value).buildPartial();
-          } else {
-            configRule_ = value;
-          }
-          onChanged();
+       * <code>string constraint_value = 2;</code>
+       * @return The constraintValue.
+       */
+      public java.lang.String getConstraintValue() {
+        java.lang.Object ref = constraintValue_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          constraintValue_ = s;
+          return s;
         } else {
-          if (configRuleCase_ == 3) {
-            aclBuilder_.mergeFrom(value);
-          }
-          aclBuilder_.setMessage(value);
+          return (java.lang.String) ref;
         }
-        configRuleCase_ = 3;
-        return this;
       }
       /**
-       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       * <code>string constraint_value = 2;</code>
+       * @return The bytes for constraintValue.
        */
-      public Builder clearAcl() {
-        if (aclBuilder_ == null) {
-          if (configRuleCase_ == 3) {
-            configRuleCase_ = 0;
-            configRule_ = null;
-            onChanged();
-          }
+      public com.google.protobuf.ByteString
+          getConstraintValueBytes() {
+        java.lang.Object ref = constraintValue_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          constraintValue_ = b;
+          return b;
         } else {
-          if (configRuleCase_ == 3) {
-            configRuleCase_ = 0;
-            configRule_ = null;
-          }
-          aclBuilder_.clear();
+          return (com.google.protobuf.ByteString) ref;
         }
-        return this;
       }
       /**
-       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       * <code>string constraint_value = 2;</code>
+       * @param value The constraintValue to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ConfigRule_ACL.Builder getAclBuilder() {
-        return getAclFieldBuilder().getBuilder();
+      public Builder setConstraintValue(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        constraintValue_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       * <code>string constraint_value = 2;</code>
+       * @return This builder for chaining.
        */
-      @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_ACLOrBuilder getAclOrBuilder() {
-        if ((configRuleCase_ == 3) && (aclBuilder_ != null)) {
-          return aclBuilder_.getMessageOrBuilder();
-        } else {
-          if (configRuleCase_ == 3) {
-            return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
-          }
-          return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
-        }
+      public Builder clearConstraintValue() {
+        
+        constraintValue_ = getDefaultInstance().getConstraintValue();
+        onChanged();
+        return this;
       }
       /**
-       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       * <code>string constraint_value = 2;</code>
+       * @param value The bytes for constraintValue to set.
+       * @return This builder for chaining.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConfigRule_ACL, context.ContextOuterClass.ConfigRule_ACL.Builder, context.ContextOuterClass.ConfigRule_ACLOrBuilder> 
-          getAclFieldBuilder() {
-        if (aclBuilder_ == null) {
-          if (!(configRuleCase_ == 3)) {
-            configRule_ = context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
-          }
-          aclBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConfigRule_ACL, context.ContextOuterClass.ConfigRule_ACL.Builder, context.ContextOuterClass.ConfigRule_ACLOrBuilder>(
-                  (context.ContextOuterClass.ConfigRule_ACL) configRule_,
-                  getParentForChildren(),
-                  isClean());
-          configRule_ = null;
-        }
-        configRuleCase_ = 3;
-        onChanged();;
-        return aclBuilder_;
+      public Builder setConstraintValueBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        constraintValue_ = value;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -50159,100 +51881,82 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConfigRule)
+      // @@protoc_insertion_point(builder_scope:context.Constraint_Custom)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConfigRule)
-    private static final context.ContextOuterClass.ConfigRule DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Constraint_Custom)
+    private static final context.ContextOuterClass.Constraint_Custom DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_Custom();
     }
 
-    public static context.ContextOuterClass.ConfigRule getDefaultInstance() {
+    public static context.ContextOuterClass.Constraint_Custom getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConfigRule>
-        PARSER = new com.google.protobuf.AbstractParser<ConfigRule>() {
+    private static final com.google.protobuf.Parser<Constraint_Custom>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_Custom>() {
       @java.lang.Override
-      public ConfigRule parsePartialFrom(
+      public Constraint_Custom parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConfigRule(input, extensionRegistry);
+        return new Constraint_Custom(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConfigRule> parser() {
+    public static com.google.protobuf.Parser<Constraint_Custom> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConfigRule> getParserForType() {
+    public com.google.protobuf.Parser<Constraint_Custom> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule getDefaultInstanceForType() {
+    public context.ContextOuterClass.Constraint_Custom getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface Constraint_CustomOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Constraint_Custom)
+  public interface Constraint_ScheduleOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_Schedule)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>string constraint_type = 1;</code>
-     * @return The constraintType.
-     */
-    java.lang.String getConstraintType();
-    /**
-     * <code>string constraint_type = 1;</code>
-     * @return The bytes for constraintType.
+     * <code>float start_timestamp = 1;</code>
+     * @return The startTimestamp.
      */
-    com.google.protobuf.ByteString
-        getConstraintTypeBytes();
+    float getStartTimestamp();
 
     /**
-     * <code>string constraint_value = 2;</code>
-     * @return The constraintValue.
-     */
-    java.lang.String getConstraintValue();
-    /**
-     * <code>string constraint_value = 2;</code>
-     * @return The bytes for constraintValue.
+     * <code>float duration_days = 2;</code>
+     * @return The durationDays.
      */
-    com.google.protobuf.ByteString
-        getConstraintValueBytes();
+    float getDurationDays();
   }
   /**
-   * <pre>
-   * ----- Constraint ----------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.Constraint_Custom}
+   * Protobuf type {@code context.Constraint_Schedule}
    */
-  public static final class Constraint_Custom extends
+  public static final class Constraint_Schedule extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Constraint_Custom)
-      Constraint_CustomOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Constraint_Schedule)
+      Constraint_ScheduleOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Constraint_Custom.newBuilder() to construct.
-    private Constraint_Custom(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Constraint_Schedule.newBuilder() to construct.
+    private Constraint_Schedule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Constraint_Custom() {
-      constraintType_ = "";
-      constraintValue_ = "";
+    private Constraint_Schedule() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Constraint_Custom();
+      return new Constraint_Schedule();
     }
 
     @java.lang.Override
@@ -50260,7 +51964,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Constraint_Custom(
+    private Constraint_Schedule(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -50278,16 +51982,14 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 10: {
-              java.lang.String s = input.readStringRequireUtf8();
+            case 13: {
 
-              constraintType_ = s;
+              startTimestamp_ = input.readFloat();
               break;
             }
-            case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
+            case 21: {
 
-              constraintValue_ = s;
+              durationDays_ = input.readFloat();
               break;
             }
             default: {
@@ -50311,91 +52013,37 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Constraint_Custom_descriptor;
+      return context.ContextOuterClass.internal_static_context_Constraint_Schedule_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Constraint_Custom_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Constraint_Schedule_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Constraint_Custom.class, context.ContextOuterClass.Constraint_Custom.Builder.class);
-    }
-
-    public static final int CONSTRAINT_TYPE_FIELD_NUMBER = 1;
-    private volatile java.lang.Object constraintType_;
-    /**
-     * <code>string constraint_type = 1;</code>
-     * @return The constraintType.
-     */
-    @java.lang.Override
-    public java.lang.String getConstraintType() {
-      java.lang.Object ref = constraintType_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        constraintType_ = s;
-        return s;
-      }
-    }
-    /**
-     * <code>string constraint_type = 1;</code>
-     * @return The bytes for constraintType.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString
-        getConstraintTypeBytes() {
-      java.lang.Object ref = constraintType_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        constraintType_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+              context.ContextOuterClass.Constraint_Schedule.class, context.ContextOuterClass.Constraint_Schedule.Builder.class);
     }
 
-    public static final int CONSTRAINT_VALUE_FIELD_NUMBER = 2;
-    private volatile java.lang.Object constraintValue_;
+    public static final int START_TIMESTAMP_FIELD_NUMBER = 1;
+    private float startTimestamp_;
     /**
-     * <code>string constraint_value = 2;</code>
-     * @return The constraintValue.
-     */
-    @java.lang.Override
-    public java.lang.String getConstraintValue() {
-      java.lang.Object ref = constraintValue_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        constraintValue_ = s;
-        return s;
-      }
+     * <code>float start_timestamp = 1;</code>
+     * @return The startTimestamp.
+     */
+    @java.lang.Override
+    public float getStartTimestamp() {
+      return startTimestamp_;
     }
+
+    public static final int DURATION_DAYS_FIELD_NUMBER = 2;
+    private float durationDays_;
     /**
-     * <code>string constraint_value = 2;</code>
-     * @return The bytes for constraintValue.
+     * <code>float duration_days = 2;</code>
+     * @return The durationDays.
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getConstraintValueBytes() {
-      java.lang.Object ref = constraintValue_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        constraintValue_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public float getDurationDays() {
+      return durationDays_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -50412,11 +52060,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (!getConstraintTypeBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, constraintType_);
+      if (startTimestamp_ != 0F) {
+        output.writeFloat(1, startTimestamp_);
       }
-      if (!getConstraintValueBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, constraintValue_);
+      if (durationDays_ != 0F) {
+        output.writeFloat(2, durationDays_);
       }
       unknownFields.writeTo(output);
     }
@@ -50427,11 +52075,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (!getConstraintTypeBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, constraintType_);
+      if (startTimestamp_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(1, startTimestamp_);
       }
-      if (!getConstraintValueBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, constraintValue_);
+      if (durationDays_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(2, durationDays_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -50443,15 +52093,17 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Constraint_Custom)) {
+      if (!(obj instanceof context.ContextOuterClass.Constraint_Schedule)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Constraint_Custom other = (context.ContextOuterClass.Constraint_Custom) obj;
+      context.ContextOuterClass.Constraint_Schedule other = (context.ContextOuterClass.Constraint_Schedule) obj;
 
-      if (!getConstraintType()
-          .equals(other.getConstraintType())) return false;
-      if (!getConstraintValue()
-          .equals(other.getConstraintValue())) return false;
+      if (java.lang.Float.floatToIntBits(getStartTimestamp())
+          != java.lang.Float.floatToIntBits(
+              other.getStartTimestamp())) return false;
+      if (java.lang.Float.floatToIntBits(getDurationDays())
+          != java.lang.Float.floatToIntBits(
+              other.getDurationDays())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -50463,78 +52115,80 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + CONSTRAINT_TYPE_FIELD_NUMBER;
-      hash = (53 * hash) + getConstraintType().hashCode();
-      hash = (37 * hash) + CONSTRAINT_VALUE_FIELD_NUMBER;
-      hash = (53 * hash) + getConstraintValue().hashCode();
+      hash = (37 * hash) + START_TIMESTAMP_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getStartTimestamp());
+      hash = (37 * hash) + DURATION_DAYS_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getDurationDays());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(byte[] data)
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_Schedule parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseDelimitedFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -50547,7 +52201,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Constraint_Custom prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Constraint_Schedule prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -50563,30 +52217,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Constraint ----------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.Constraint_Custom}
+     * Protobuf type {@code context.Constraint_Schedule}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Constraint_Custom)
-        context.ContextOuterClass.Constraint_CustomOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Constraint_Schedule)
+        context.ContextOuterClass.Constraint_ScheduleOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Constraint_Custom_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_Schedule_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Constraint_Custom_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Constraint_Schedule_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Constraint_Custom.class, context.ContextOuterClass.Constraint_Custom.Builder.class);
+                context.ContextOuterClass.Constraint_Schedule.class, context.ContextOuterClass.Constraint_Schedule.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Constraint_Custom.newBuilder()
+      // Construct using context.ContextOuterClass.Constraint_Schedule.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -50604,9 +52254,9 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        constraintType_ = "";
+        startTimestamp_ = 0F;
 
-        constraintValue_ = "";
+        durationDays_ = 0F;
 
         return this;
       }
@@ -50614,17 +52264,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Constraint_Custom_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_Schedule_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_Custom getDefaultInstanceForType() {
-        return context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
+      public context.ContextOuterClass.Constraint_Schedule getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_Custom build() {
-        context.ContextOuterClass.Constraint_Custom result = buildPartial();
+      public context.ContextOuterClass.Constraint_Schedule build() {
+        context.ContextOuterClass.Constraint_Schedule result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -50632,10 +52282,10 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_Custom buildPartial() {
-        context.ContextOuterClass.Constraint_Custom result = new context.ContextOuterClass.Constraint_Custom(this);
-        result.constraintType_ = constraintType_;
-        result.constraintValue_ = constraintValue_;
+      public context.ContextOuterClass.Constraint_Schedule buildPartial() {
+        context.ContextOuterClass.Constraint_Schedule result = new context.ContextOuterClass.Constraint_Schedule(this);
+        result.startTimestamp_ = startTimestamp_;
+        result.durationDays_ = durationDays_;
         onBuilt();
         return result;
       }
@@ -50674,23 +52324,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Constraint_Custom) {
-          return mergeFrom((context.ContextOuterClass.Constraint_Custom)other);
+        if (other instanceof context.ContextOuterClass.Constraint_Schedule) {
+          return mergeFrom((context.ContextOuterClass.Constraint_Schedule)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Constraint_Custom other) {
-        if (other == context.ContextOuterClass.Constraint_Custom.getDefaultInstance()) return this;
-        if (!other.getConstraintType().isEmpty()) {
-          constraintType_ = other.constraintType_;
-          onChanged();
+      public Builder mergeFrom(context.ContextOuterClass.Constraint_Schedule other) {
+        if (other == context.ContextOuterClass.Constraint_Schedule.getDefaultInstance()) return this;
+        if (other.getStartTimestamp() != 0F) {
+          setStartTimestamp(other.getStartTimestamp());
         }
-        if (!other.getConstraintValue().isEmpty()) {
-          constraintValue_ = other.constraintValue_;
-          onChanged();
+        if (other.getDurationDays() != 0F) {
+          setDurationDays(other.getDurationDays());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -50707,168 +52355,78 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Constraint_Custom parsedMessage = null;
+        context.ContextOuterClass.Constraint_Schedule parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Constraint_Custom) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private java.lang.Object constraintType_ = "";
-      /**
-       * <code>string constraint_type = 1;</code>
-       * @return The constraintType.
-       */
-      public java.lang.String getConstraintType() {
-        java.lang.Object ref = constraintType_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          constraintType_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>string constraint_type = 1;</code>
-       * @return The bytes for constraintType.
-       */
-      public com.google.protobuf.ByteString
-          getConstraintTypeBytes() {
-        java.lang.Object ref = constraintType_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          constraintType_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       * <code>string constraint_type = 1;</code>
-       * @param value The constraintType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setConstraintType(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        constraintType_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string constraint_type = 1;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearConstraintType() {
-        
-        constraintType_ = getDefaultInstance().getConstraintType();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string constraint_type = 1;</code>
-       * @param value The bytes for constraintType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setConstraintTypeBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        constraintType_ = value;
-        onChanged();
-        return this;
-      }
-
-      private java.lang.Object constraintValue_ = "";
-      /**
-       * <code>string constraint_value = 2;</code>
-       * @return The constraintValue.
-       */
-      public java.lang.String getConstraintValue() {
-        java.lang.Object ref = constraintValue_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          constraintValue_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
+          parsedMessage = (context.ContextOuterClass.Constraint_Schedule) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
         }
+        return this;
       }
+
+      private float startTimestamp_ ;
       /**
-       * <code>string constraint_value = 2;</code>
-       * @return The bytes for constraintValue.
+       * <code>float start_timestamp = 1;</code>
+       * @return The startTimestamp.
        */
-      public com.google.protobuf.ByteString
-          getConstraintValueBytes() {
-        java.lang.Object ref = constraintValue_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          constraintValue_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
+      @java.lang.Override
+      public float getStartTimestamp() {
+        return startTimestamp_;
       }
       /**
-       * <code>string constraint_value = 2;</code>
-       * @param value The constraintValue to set.
+       * <code>float start_timestamp = 1;</code>
+       * @param value The startTimestamp to set.
        * @return This builder for chaining.
        */
-      public Builder setConstraintValue(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        constraintValue_ = value;
+      public Builder setStartTimestamp(float value) {
+        
+        startTimestamp_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>string constraint_value = 2;</code>
+       * <code>float start_timestamp = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder clearConstraintValue() {
+      public Builder clearStartTimestamp() {
         
-        constraintValue_ = getDefaultInstance().getConstraintValue();
+        startTimestamp_ = 0F;
         onChanged();
         return this;
       }
+
+      private float durationDays_ ;
+      /**
+       * <code>float duration_days = 2;</code>
+       * @return The durationDays.
+       */
+      @java.lang.Override
+      public float getDurationDays() {
+        return durationDays_;
+      }
       /**
-       * <code>string constraint_value = 2;</code>
-       * @param value The bytes for constraintValue to set.
+       * <code>float duration_days = 2;</code>
+       * @param value The durationDays to set.
        * @return This builder for chaining.
        */
-      public Builder setConstraintValueBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
+      public Builder setDurationDays(float value) {
         
-        constraintValue_ = value;
+        durationDays_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>float duration_days = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDurationDays() {
+        
+        durationDays_ = 0F;
         onChanged();
         return this;
       }
@@ -50885,82 +52443,82 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Constraint_Custom)
+      // @@protoc_insertion_point(builder_scope:context.Constraint_Schedule)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Constraint_Custom)
-    private static final context.ContextOuterClass.Constraint_Custom DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Constraint_Schedule)
+    private static final context.ContextOuterClass.Constraint_Schedule DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_Custom();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_Schedule();
     }
 
-    public static context.ContextOuterClass.Constraint_Custom getDefaultInstance() {
+    public static context.ContextOuterClass.Constraint_Schedule getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Constraint_Custom>
-        PARSER = new com.google.protobuf.AbstractParser<Constraint_Custom>() {
+    private static final com.google.protobuf.Parser<Constraint_Schedule>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_Schedule>() {
       @java.lang.Override
-      public Constraint_Custom parsePartialFrom(
+      public Constraint_Schedule parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Constraint_Custom(input, extensionRegistry);
+        return new Constraint_Schedule(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Constraint_Custom> parser() {
+    public static com.google.protobuf.Parser<Constraint_Schedule> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Constraint_Custom> getParserForType() {
+    public com.google.protobuf.Parser<Constraint_Schedule> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Constraint_Custom getDefaultInstanceForType() {
+    public context.ContextOuterClass.Constraint_Schedule getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface Constraint_ScheduleOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Constraint_Schedule)
+  public interface GPS_PositionOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.GPS_Position)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>float start_timestamp = 1;</code>
-     * @return The startTimestamp.
+     * <code>float latitude = 1;</code>
+     * @return The latitude.
      */
-    float getStartTimestamp();
+    float getLatitude();
 
     /**
-     * <code>float duration_days = 2;</code>
-     * @return The durationDays.
+     * <code>float longitude = 2;</code>
+     * @return The longitude.
      */
-    float getDurationDays();
+    float getLongitude();
   }
   /**
-   * Protobuf type {@code context.Constraint_Schedule}
+   * Protobuf type {@code context.GPS_Position}
    */
-  public static final class Constraint_Schedule extends
+  public static final class GPS_Position extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Constraint_Schedule)
-      Constraint_ScheduleOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.GPS_Position)
+      GPS_PositionOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Constraint_Schedule.newBuilder() to construct.
-    private Constraint_Schedule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use GPS_Position.newBuilder() to construct.
+    private GPS_Position(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Constraint_Schedule() {
+    private GPS_Position() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Constraint_Schedule();
+      return new GPS_Position();
     }
 
     @java.lang.Override
@@ -50968,7 +52526,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Constraint_Schedule(
+    private GPS_Position(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -50988,12 +52546,12 @@ public final class ContextOuterClass {
               break;
             case 13: {
 
-              startTimestamp_ = input.readFloat();
+              latitude_ = input.readFloat();
               break;
             }
             case 21: {
 
-              durationDays_ = input.readFloat();
+              longitude_ = input.readFloat();
               break;
             }
             default: {
@@ -51017,37 +52575,37 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Constraint_Schedule_descriptor;
+      return context.ContextOuterClass.internal_static_context_GPS_Position_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Constraint_Schedule_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_GPS_Position_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Constraint_Schedule.class, context.ContextOuterClass.Constraint_Schedule.Builder.class);
+              context.ContextOuterClass.GPS_Position.class, context.ContextOuterClass.GPS_Position.Builder.class);
     }
 
-    public static final int START_TIMESTAMP_FIELD_NUMBER = 1;
-    private float startTimestamp_;
+    public static final int LATITUDE_FIELD_NUMBER = 1;
+    private float latitude_;
     /**
-     * <code>float start_timestamp = 1;</code>
-     * @return The startTimestamp.
+     * <code>float latitude = 1;</code>
+     * @return The latitude.
      */
     @java.lang.Override
-    public float getStartTimestamp() {
-      return startTimestamp_;
+    public float getLatitude() {
+      return latitude_;
     }
 
-    public static final int DURATION_DAYS_FIELD_NUMBER = 2;
-    private float durationDays_;
+    public static final int LONGITUDE_FIELD_NUMBER = 2;
+    private float longitude_;
     /**
-     * <code>float duration_days = 2;</code>
-     * @return The durationDays.
+     * <code>float longitude = 2;</code>
+     * @return The longitude.
      */
     @java.lang.Override
-    public float getDurationDays() {
-      return durationDays_;
+    public float getLongitude() {
+      return longitude_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -51064,11 +52622,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (startTimestamp_ != 0F) {
-        output.writeFloat(1, startTimestamp_);
+      if (latitude_ != 0F) {
+        output.writeFloat(1, latitude_);
       }
-      if (durationDays_ != 0F) {
-        output.writeFloat(2, durationDays_);
+      if (longitude_ != 0F) {
+        output.writeFloat(2, longitude_);
       }
       unknownFields.writeTo(output);
     }
@@ -51079,13 +52637,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (startTimestamp_ != 0F) {
+      if (latitude_ != 0F) {
         size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(1, startTimestamp_);
+          .computeFloatSize(1, latitude_);
       }
-      if (durationDays_ != 0F) {
+      if (longitude_ != 0F) {
         size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(2, durationDays_);
+          .computeFloatSize(2, longitude_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -51097,17 +52655,17 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Constraint_Schedule)) {
+      if (!(obj instanceof context.ContextOuterClass.GPS_Position)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Constraint_Schedule other = (context.ContextOuterClass.Constraint_Schedule) obj;
+      context.ContextOuterClass.GPS_Position other = (context.ContextOuterClass.GPS_Position) obj;
 
-      if (java.lang.Float.floatToIntBits(getStartTimestamp())
+      if (java.lang.Float.floatToIntBits(getLatitude())
           != java.lang.Float.floatToIntBits(
-              other.getStartTimestamp())) return false;
-      if (java.lang.Float.floatToIntBits(getDurationDays())
+              other.getLatitude())) return false;
+      if (java.lang.Float.floatToIntBits(getLongitude())
           != java.lang.Float.floatToIntBits(
-              other.getDurationDays())) return false;
+              other.getLongitude())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -51119,80 +52677,80 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + START_TIMESTAMP_FIELD_NUMBER;
+      hash = (37 * hash) + LATITUDE_FIELD_NUMBER;
       hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getStartTimestamp());
-      hash = (37 * hash) + DURATION_DAYS_FIELD_NUMBER;
+          getLatitude());
+      hash = (37 * hash) + LONGITUDE_FIELD_NUMBER;
       hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getDurationDays());
+          getLongitude());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
+    public static context.ContextOuterClass.GPS_Position parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
+    public static context.ContextOuterClass.GPS_Position parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
+    public static context.ContextOuterClass.GPS_Position parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
+    public static context.ContextOuterClass.GPS_Position parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(byte[] data)
+    public static context.ContextOuterClass.GPS_Position parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
+    public static context.ContextOuterClass.GPS_Position parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.GPS_Position parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
+    public static context.ContextOuterClass.GPS_Position parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.GPS_Position parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseDelimitedFrom(
+    public static context.ContextOuterClass.GPS_Position parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
+    public static context.ContextOuterClass.GPS_Position parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
+    public static context.ContextOuterClass.GPS_Position parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -51205,7 +52763,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Constraint_Schedule prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.GPS_Position prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -51221,26 +52779,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Constraint_Schedule}
+     * Protobuf type {@code context.GPS_Position}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Constraint_Schedule)
-        context.ContextOuterClass.Constraint_ScheduleOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.GPS_Position)
+        context.ContextOuterClass.GPS_PositionOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Constraint_Schedule_descriptor;
+        return context.ContextOuterClass.internal_static_context_GPS_Position_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Constraint_Schedule_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_GPS_Position_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Constraint_Schedule.class, context.ContextOuterClass.Constraint_Schedule.Builder.class);
+                context.ContextOuterClass.GPS_Position.class, context.ContextOuterClass.GPS_Position.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Constraint_Schedule.newBuilder()
+      // Construct using context.ContextOuterClass.GPS_Position.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -51258,9 +52816,9 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        startTimestamp_ = 0F;
+        latitude_ = 0F;
 
-        durationDays_ = 0F;
+        longitude_ = 0F;
 
         return this;
       }
@@ -51268,17 +52826,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Constraint_Schedule_descriptor;
+        return context.ContextOuterClass.internal_static_context_GPS_Position_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_Schedule getDefaultInstanceForType() {
-        return context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
+      public context.ContextOuterClass.GPS_Position getDefaultInstanceForType() {
+        return context.ContextOuterClass.GPS_Position.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_Schedule build() {
-        context.ContextOuterClass.Constraint_Schedule result = buildPartial();
+      public context.ContextOuterClass.GPS_Position build() {
+        context.ContextOuterClass.GPS_Position result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -51286,10 +52844,10 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_Schedule buildPartial() {
-        context.ContextOuterClass.Constraint_Schedule result = new context.ContextOuterClass.Constraint_Schedule(this);
-        result.startTimestamp_ = startTimestamp_;
-        result.durationDays_ = durationDays_;
+      public context.ContextOuterClass.GPS_Position buildPartial() {
+        context.ContextOuterClass.GPS_Position result = new context.ContextOuterClass.GPS_Position(this);
+        result.latitude_ = latitude_;
+        result.longitude_ = longitude_;
         onBuilt();
         return result;
       }
@@ -51328,21 +52886,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Constraint_Schedule) {
-          return mergeFrom((context.ContextOuterClass.Constraint_Schedule)other);
+        if (other instanceof context.ContextOuterClass.GPS_Position) {
+          return mergeFrom((context.ContextOuterClass.GPS_Position)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Constraint_Schedule other) {
-        if (other == context.ContextOuterClass.Constraint_Schedule.getDefaultInstance()) return this;
-        if (other.getStartTimestamp() != 0F) {
-          setStartTimestamp(other.getStartTimestamp());
+      public Builder mergeFrom(context.ContextOuterClass.GPS_Position other) {
+        if (other == context.ContextOuterClass.GPS_Position.getDefaultInstance()) return this;
+        if (other.getLatitude() != 0F) {
+          setLatitude(other.getLatitude());
         }
-        if (other.getDurationDays() != 0F) {
-          setDurationDays(other.getDurationDays());
+        if (other.getLongitude() != 0F) {
+          setLongitude(other.getLongitude());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -51359,11 +52917,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Constraint_Schedule parsedMessage = null;
+        context.ContextOuterClass.GPS_Position parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Constraint_Schedule) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.GPS_Position) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -51373,64 +52931,64 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private float startTimestamp_ ;
+      private float latitude_ ;
       /**
-       * <code>float start_timestamp = 1;</code>
-       * @return The startTimestamp.
+       * <code>float latitude = 1;</code>
+       * @return The latitude.
        */
       @java.lang.Override
-      public float getStartTimestamp() {
-        return startTimestamp_;
+      public float getLatitude() {
+        return latitude_;
       }
       /**
-       * <code>float start_timestamp = 1;</code>
-       * @param value The startTimestamp to set.
+       * <code>float latitude = 1;</code>
+       * @param value The latitude to set.
        * @return This builder for chaining.
        */
-      public Builder setStartTimestamp(float value) {
+      public Builder setLatitude(float value) {
         
-        startTimestamp_ = value;
+        latitude_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>float start_timestamp = 1;</code>
+       * <code>float latitude = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder clearStartTimestamp() {
+      public Builder clearLatitude() {
         
-        startTimestamp_ = 0F;
+        latitude_ = 0F;
         onChanged();
         return this;
       }
 
-      private float durationDays_ ;
+      private float longitude_ ;
       /**
-       * <code>float duration_days = 2;</code>
-       * @return The durationDays.
+       * <code>float longitude = 2;</code>
+       * @return The longitude.
        */
       @java.lang.Override
-      public float getDurationDays() {
-        return durationDays_;
+      public float getLongitude() {
+        return longitude_;
       }
       /**
-       * <code>float duration_days = 2;</code>
-       * @param value The durationDays to set.
+       * <code>float longitude = 2;</code>
+       * @param value The longitude to set.
        * @return This builder for chaining.
        */
-      public Builder setDurationDays(float value) {
+      public Builder setLongitude(float value) {
         
-        durationDays_ = value;
+        longitude_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>float duration_days = 2;</code>
+       * <code>float longitude = 2;</code>
        * @return This builder for chaining.
        */
-      public Builder clearDurationDays() {
+      public Builder clearLongitude() {
         
-        durationDays_ = 0F;
+        longitude_ = 0F;
         onChanged();
         return this;
       }
@@ -51447,82 +53005,104 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Constraint_Schedule)
+      // @@protoc_insertion_point(builder_scope:context.GPS_Position)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Constraint_Schedule)
-    private static final context.ContextOuterClass.Constraint_Schedule DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.GPS_Position)
+    private static final context.ContextOuterClass.GPS_Position DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_Schedule();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.GPS_Position();
     }
 
-    public static context.ContextOuterClass.Constraint_Schedule getDefaultInstance() {
+    public static context.ContextOuterClass.GPS_Position getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Constraint_Schedule>
-        PARSER = new com.google.protobuf.AbstractParser<Constraint_Schedule>() {
+    private static final com.google.protobuf.Parser<GPS_Position>
+        PARSER = new com.google.protobuf.AbstractParser<GPS_Position>() {
       @java.lang.Override
-      public Constraint_Schedule parsePartialFrom(
+      public GPS_Position parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Constraint_Schedule(input, extensionRegistry);
+        return new GPS_Position(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Constraint_Schedule> parser() {
+    public static com.google.protobuf.Parser<GPS_Position> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Constraint_Schedule> getParserForType() {
+    public com.google.protobuf.Parser<GPS_Position> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Constraint_Schedule getDefaultInstanceForType() {
+    public context.ContextOuterClass.GPS_Position getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface GPS_PositionOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.GPS_Position)
+  public interface LocationOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Location)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>float latitude = 1;</code>
-     * @return The latitude.
+     * <code>string region = 1;</code>
+     * @return Whether the region field is set.
      */
-    float getLatitude();
+    boolean hasRegion();
+    /**
+     * <code>string region = 1;</code>
+     * @return The region.
+     */
+    java.lang.String getRegion();
+    /**
+     * <code>string region = 1;</code>
+     * @return The bytes for region.
+     */
+    com.google.protobuf.ByteString
+        getRegionBytes();
 
     /**
-     * <code>float longitude = 2;</code>
-     * @return The longitude.
+     * <code>.context.GPS_Position gps_position = 2;</code>
+     * @return Whether the gpsPosition field is set.
      */
-    float getLongitude();
+    boolean hasGpsPosition();
+    /**
+     * <code>.context.GPS_Position gps_position = 2;</code>
+     * @return The gpsPosition.
+     */
+    context.ContextOuterClass.GPS_Position getGpsPosition();
+    /**
+     * <code>.context.GPS_Position gps_position = 2;</code>
+     */
+    context.ContextOuterClass.GPS_PositionOrBuilder getGpsPositionOrBuilder();
+
+    public context.ContextOuterClass.Location.LocationCase getLocationCase();
   }
   /**
-   * Protobuf type {@code context.GPS_Position}
+   * Protobuf type {@code context.Location}
    */
-  public static final class GPS_Position extends
+  public static final class Location extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.GPS_Position)
-      GPS_PositionOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Location)
+      LocationOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use GPS_Position.newBuilder() to construct.
-    private GPS_Position(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Location.newBuilder() to construct.
+    private Location(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private GPS_Position() {
+    private Location() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new GPS_Position();
+      return new Location();
     }
 
     @java.lang.Override
@@ -51530,7 +53110,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private GPS_Position(
+    private Location(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -51538,78 +53118,190 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            case 13: {
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
+              locationCase_ = 1;
+              location_ = s;
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.GPS_Position.Builder subBuilder = null;
+              if (locationCase_ == 2) {
+                subBuilder = ((context.ContextOuterClass.GPS_Position) location_).toBuilder();
+              }
+              location_ =
+                  input.readMessage(context.ContextOuterClass.GPS_Position.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom((context.ContextOuterClass.GPS_Position) location_);
+                location_ = subBuilder.buildPartial();
+              }
+              locationCase_ = 2;
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Location_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Location_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Location.class, context.ContextOuterClass.Location.Builder.class);
+    }
+
+    private int locationCase_ = 0;
+    private java.lang.Object location_;
+    public enum LocationCase
+        implements com.google.protobuf.Internal.EnumLite,
+            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+      REGION(1),
+      GPS_POSITION(2),
+      LOCATION_NOT_SET(0);
+      private final int value;
+      private LocationCase(int value) {
+        this.value = value;
+      }
+      /**
+       * @param value The number of the enum to look for.
+       * @return The enum associated with the given number.
+       * @deprecated Use {@link #forNumber(int)} instead.
+       */
+      @java.lang.Deprecated
+      public static LocationCase valueOf(int value) {
+        return forNumber(value);
+      }
+
+      public static LocationCase forNumber(int value) {
+        switch (value) {
+          case 1: return REGION;
+          case 2: return GPS_POSITION;
+          case 0: return LOCATION_NOT_SET;
+          default: return null;
+        }
+      }
+      public int getNumber() {
+        return this.value;
+      }
+    };
 
-              latitude_ = input.readFloat();
-              break;
-            }
-            case 21: {
+    public LocationCase
+    getLocationCase() {
+      return LocationCase.forNumber(
+          locationCase_);
+    }
 
-              longitude_ = input.readFloat();
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
+    public static final int REGION_FIELD_NUMBER = 1;
+    /**
+     * <code>string region = 1;</code>
+     * @return Whether the region field is set.
+     */
+    public boolean hasRegion() {
+      return locationCase_ == 1;
+    }
+    /**
+     * <code>string region = 1;</code>
+     * @return The region.
+     */
+    public java.lang.String getRegion() {
+      java.lang.Object ref = "";
+      if (locationCase_ == 1) {
+        ref = location_;
+      }
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (locationCase_ == 1) {
+          location_ = s;
         }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
+        return s;
       }
     }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_GPS_Position_descriptor;
+    /**
+     * <code>string region = 1;</code>
+     * @return The bytes for region.
+     */
+    public com.google.protobuf.ByteString
+        getRegionBytes() {
+      java.lang.Object ref = "";
+      if (locationCase_ == 1) {
+        ref = location_;
+      }
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        if (locationCase_ == 1) {
+          location_ = b;
+        }
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
+    public static final int GPS_POSITION_FIELD_NUMBER = 2;
+    /**
+     * <code>.context.GPS_Position gps_position = 2;</code>
+     * @return Whether the gpsPosition field is set.
+     */
     @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_GPS_Position_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.GPS_Position.class, context.ContextOuterClass.GPS_Position.Builder.class);
+    public boolean hasGpsPosition() {
+      return locationCase_ == 2;
     }
-
-    public static final int LATITUDE_FIELD_NUMBER = 1;
-    private float latitude_;
     /**
-     * <code>float latitude = 1;</code>
-     * @return The latitude.
+     * <code>.context.GPS_Position gps_position = 2;</code>
+     * @return The gpsPosition.
      */
     @java.lang.Override
-    public float getLatitude() {
-      return latitude_;
+    public context.ContextOuterClass.GPS_Position getGpsPosition() {
+      if (locationCase_ == 2) {
+         return (context.ContextOuterClass.GPS_Position) location_;
+      }
+      return context.ContextOuterClass.GPS_Position.getDefaultInstance();
     }
-
-    public static final int LONGITUDE_FIELD_NUMBER = 2;
-    private float longitude_;
     /**
-     * <code>float longitude = 2;</code>
-     * @return The longitude.
+     * <code>.context.GPS_Position gps_position = 2;</code>
      */
     @java.lang.Override
-    public float getLongitude() {
-      return longitude_;
+    public context.ContextOuterClass.GPS_PositionOrBuilder getGpsPositionOrBuilder() {
+      if (locationCase_ == 2) {
+         return (context.ContextOuterClass.GPS_Position) location_;
+      }
+      return context.ContextOuterClass.GPS_Position.getDefaultInstance();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -51626,11 +53318,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (latitude_ != 0F) {
-        output.writeFloat(1, latitude_);
+      if (locationCase_ == 1) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, location_);
       }
-      if (longitude_ != 0F) {
-        output.writeFloat(2, longitude_);
+      if (locationCase_ == 2) {
+        output.writeMessage(2, (context.ContextOuterClass.GPS_Position) location_);
       }
       unknownFields.writeTo(output);
     }
@@ -51641,13 +53333,12 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (latitude_ != 0F) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(1, latitude_);
+      if (locationCase_ == 1) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, location_);
       }
-      if (longitude_ != 0F) {
+      if (locationCase_ == 2) {
         size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(2, longitude_);
+          .computeMessageSize(2, (context.ContextOuterClass.GPS_Position) location_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -51659,17 +53350,24 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.GPS_Position)) {
+      if (!(obj instanceof context.ContextOuterClass.Location)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.GPS_Position other = (context.ContextOuterClass.GPS_Position) obj;
+      context.ContextOuterClass.Location other = (context.ContextOuterClass.Location) obj;
 
-      if (java.lang.Float.floatToIntBits(getLatitude())
-          != java.lang.Float.floatToIntBits(
-              other.getLatitude())) return false;
-      if (java.lang.Float.floatToIntBits(getLongitude())
-          != java.lang.Float.floatToIntBits(
-              other.getLongitude())) return false;
+      if (!getLocationCase().equals(other.getLocationCase())) return false;
+      switch (locationCase_) {
+        case 1:
+          if (!getRegion()
+              .equals(other.getRegion())) return false;
+          break;
+        case 2:
+          if (!getGpsPosition()
+              .equals(other.getGpsPosition())) return false;
+          break;
+        case 0:
+        default:
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -51681,80 +53379,86 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + LATITUDE_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getLatitude());
-      hash = (37 * hash) + LONGITUDE_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getLongitude());
+      switch (locationCase_) {
+        case 1:
+          hash = (37 * hash) + REGION_FIELD_NUMBER;
+          hash = (53 * hash) + getRegion().hashCode();
+          break;
+        case 2:
+          hash = (37 * hash) + GPS_POSITION_FIELD_NUMBER;
+          hash = (53 * hash) + getGpsPosition().hashCode();
+          break;
+        case 0:
+        default:
+      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.GPS_Position parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.GPS_Position parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.GPS_Position parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.GPS_Position parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.GPS_Position parseFrom(byte[] data)
+    public static context.ContextOuterClass.Location parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.GPS_Position parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.GPS_Position parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Location parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.GPS_Position parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.GPS_Position parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Location parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.GPS_Position parseDelimitedFrom(
+    public static context.ContextOuterClass.Location parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.GPS_Position parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.GPS_Position parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -51767,7 +53471,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.GPS_Position prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Location prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -51783,26 +53487,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.GPS_Position}
+     * Protobuf type {@code context.Location}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.GPS_Position)
-        context.ContextOuterClass.GPS_PositionOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Location)
+        context.ContextOuterClass.LocationOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_GPS_Position_descriptor;
+        return context.ContextOuterClass.internal_static_context_Location_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_GPS_Position_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Location_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.GPS_Position.class, context.ContextOuterClass.GPS_Position.Builder.class);
+                context.ContextOuterClass.Location.class, context.ContextOuterClass.Location.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.GPS_Position.newBuilder()
+      // Construct using context.ContextOuterClass.Location.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -51820,27 +53524,25 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        latitude_ = 0F;
-
-        longitude_ = 0F;
-
+        locationCase_ = 0;
+        location_ = null;
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_GPS_Position_descriptor;
+        return context.ContextOuterClass.internal_static_context_Location_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.GPS_Position getDefaultInstanceForType() {
-        return context.ContextOuterClass.GPS_Position.getDefaultInstance();
+      public context.ContextOuterClass.Location getDefaultInstanceForType() {
+        return context.ContextOuterClass.Location.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.GPS_Position build() {
-        context.ContextOuterClass.GPS_Position result = buildPartial();
+      public context.ContextOuterClass.Location build() {
+        context.ContextOuterClass.Location result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -51848,10 +53550,19 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.GPS_Position buildPartial() {
-        context.ContextOuterClass.GPS_Position result = new context.ContextOuterClass.GPS_Position(this);
-        result.latitude_ = latitude_;
-        result.longitude_ = longitude_;
+      public context.ContextOuterClass.Location buildPartial() {
+        context.ContextOuterClass.Location result = new context.ContextOuterClass.Location(this);
+        if (locationCase_ == 1) {
+          result.location_ = location_;
+        }
+        if (locationCase_ == 2) {
+          if (gpsPositionBuilder_ == null) {
+            result.location_ = location_;
+          } else {
+            result.location_ = gpsPositionBuilder_.build();
+          }
+        }
+        result.locationCase_ = locationCase_;
         onBuilt();
         return result;
       }
@@ -51890,21 +53601,30 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.GPS_Position) {
-          return mergeFrom((context.ContextOuterClass.GPS_Position)other);
+        if (other instanceof context.ContextOuterClass.Location) {
+          return mergeFrom((context.ContextOuterClass.Location)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.GPS_Position other) {
-        if (other == context.ContextOuterClass.GPS_Position.getDefaultInstance()) return this;
-        if (other.getLatitude() != 0F) {
-          setLatitude(other.getLatitude());
-        }
-        if (other.getLongitude() != 0F) {
-          setLongitude(other.getLongitude());
+      public Builder mergeFrom(context.ContextOuterClass.Location other) {
+        if (other == context.ContextOuterClass.Location.getDefaultInstance()) return this;
+        switch (other.getLocationCase()) {
+          case REGION: {
+            locationCase_ = 1;
+            location_ = other.location_;
+            onChanged();
+            break;
+          }
+          case GPS_POSITION: {
+            mergeGpsPosition(other.getGpsPosition());
+            break;
+          }
+          case LOCATION_NOT_SET: {
+            break;
+          }
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -51921,11 +53641,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.GPS_Position parsedMessage = null;
+        context.ContextOuterClass.Location parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.GPS_Position) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Location) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -51934,67 +53654,258 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int locationCase_ = 0;
+      private java.lang.Object location_;
+      public LocationCase
+          getLocationCase() {
+        return LocationCase.forNumber(
+            locationCase_);
+      }
+
+      public Builder clearLocation() {
+        locationCase_ = 0;
+        location_ = null;
+        onChanged();
+        return this;
+      }
+
 
-      private float latitude_ ;
       /**
-       * <code>float latitude = 1;</code>
-       * @return The latitude.
+       * <code>string region = 1;</code>
+       * @return Whether the region field is set.
        */
       @java.lang.Override
-      public float getLatitude() {
-        return latitude_;
+      public boolean hasRegion() {
+        return locationCase_ == 1;
       }
       /**
-       * <code>float latitude = 1;</code>
-       * @param value The latitude to set.
+       * <code>string region = 1;</code>
+       * @return The region.
+       */
+      @java.lang.Override
+      public java.lang.String getRegion() {
+        java.lang.Object ref = "";
+        if (locationCase_ == 1) {
+          ref = location_;
+        }
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          if (locationCase_ == 1) {
+            location_ = s;
+          }
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string region = 1;</code>
+       * @return The bytes for region.
+       */
+      @java.lang.Override
+      public com.google.protobuf.ByteString
+          getRegionBytes() {
+        java.lang.Object ref = "";
+        if (locationCase_ == 1) {
+          ref = location_;
+        }
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          if (locationCase_ == 1) {
+            location_ = b;
+          }
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string region = 1;</code>
+       * @param value The region to set.
        * @return This builder for chaining.
        */
-      public Builder setLatitude(float value) {
-        
-        latitude_ = value;
+      public Builder setRegion(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  locationCase_ = 1;
+        location_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>float latitude = 1;</code>
+       * <code>string region = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder clearLatitude() {
-        
-        latitude_ = 0F;
+      public Builder clearRegion() {
+        if (locationCase_ == 1) {
+          locationCase_ = 0;
+          location_ = null;
+          onChanged();
+        }
+        return this;
+      }
+      /**
+       * <code>string region = 1;</code>
+       * @param value The bytes for region to set.
+       * @return This builder for chaining.
+       */
+      public Builder setRegionBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        locationCase_ = 1;
+        location_ = value;
         onChanged();
         return this;
       }
 
-      private float longitude_ ;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.GPS_Position, context.ContextOuterClass.GPS_Position.Builder, context.ContextOuterClass.GPS_PositionOrBuilder> gpsPositionBuilder_;
       /**
-       * <code>float longitude = 2;</code>
-       * @return The longitude.
+       * <code>.context.GPS_Position gps_position = 2;</code>
+       * @return Whether the gpsPosition field is set.
        */
       @java.lang.Override
-      public float getLongitude() {
-        return longitude_;
+      public boolean hasGpsPosition() {
+        return locationCase_ == 2;
       }
       /**
-       * <code>float longitude = 2;</code>
-       * @param value The longitude to set.
-       * @return This builder for chaining.
+       * <code>.context.GPS_Position gps_position = 2;</code>
+       * @return The gpsPosition.
        */
-      public Builder setLongitude(float value) {
-        
-        longitude_ = value;
-        onChanged();
+      @java.lang.Override
+      public context.ContextOuterClass.GPS_Position getGpsPosition() {
+        if (gpsPositionBuilder_ == null) {
+          if (locationCase_ == 2) {
+            return (context.ContextOuterClass.GPS_Position) location_;
+          }
+          return context.ContextOuterClass.GPS_Position.getDefaultInstance();
+        } else {
+          if (locationCase_ == 2) {
+            return gpsPositionBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.GPS_Position.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.GPS_Position gps_position = 2;</code>
+       */
+      public Builder setGpsPosition(context.ContextOuterClass.GPS_Position value) {
+        if (gpsPositionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          location_ = value;
+          onChanged();
+        } else {
+          gpsPositionBuilder_.setMessage(value);
+        }
+        locationCase_ = 2;
+        return this;
+      }
+      /**
+       * <code>.context.GPS_Position gps_position = 2;</code>
+       */
+      public Builder setGpsPosition(
+          context.ContextOuterClass.GPS_Position.Builder builderForValue) {
+        if (gpsPositionBuilder_ == null) {
+          location_ = builderForValue.build();
+          onChanged();
+        } else {
+          gpsPositionBuilder_.setMessage(builderForValue.build());
+        }
+        locationCase_ = 2;
+        return this;
+      }
+      /**
+       * <code>.context.GPS_Position gps_position = 2;</code>
+       */
+      public Builder mergeGpsPosition(context.ContextOuterClass.GPS_Position value) {
+        if (gpsPositionBuilder_ == null) {
+          if (locationCase_ == 2 &&
+              location_ != context.ContextOuterClass.GPS_Position.getDefaultInstance()) {
+            location_ = context.ContextOuterClass.GPS_Position.newBuilder((context.ContextOuterClass.GPS_Position) location_)
+                .mergeFrom(value).buildPartial();
+          } else {
+            location_ = value;
+          }
+          onChanged();
+        } else {
+          if (locationCase_ == 2) {
+            gpsPositionBuilder_.mergeFrom(value);
+          }
+          gpsPositionBuilder_.setMessage(value);
+        }
+        locationCase_ = 2;
+        return this;
+      }
+      /**
+       * <code>.context.GPS_Position gps_position = 2;</code>
+       */
+      public Builder clearGpsPosition() {
+        if (gpsPositionBuilder_ == null) {
+          if (locationCase_ == 2) {
+            locationCase_ = 0;
+            location_ = null;
+            onChanged();
+          }
+        } else {
+          if (locationCase_ == 2) {
+            locationCase_ = 0;
+            location_ = null;
+          }
+          gpsPositionBuilder_.clear();
+        }
         return this;
       }
       /**
-       * <code>float longitude = 2;</code>
-       * @return This builder for chaining.
+       * <code>.context.GPS_Position gps_position = 2;</code>
+       */
+      public context.ContextOuterClass.GPS_Position.Builder getGpsPositionBuilder() {
+        return getGpsPositionFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.GPS_Position gps_position = 2;</code>
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.GPS_PositionOrBuilder getGpsPositionOrBuilder() {
+        if ((locationCase_ == 2) && (gpsPositionBuilder_ != null)) {
+          return gpsPositionBuilder_.getMessageOrBuilder();
+        } else {
+          if (locationCase_ == 2) {
+            return (context.ContextOuterClass.GPS_Position) location_;
+          }
+          return context.ContextOuterClass.GPS_Position.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.GPS_Position gps_position = 2;</code>
        */
-      public Builder clearLongitude() {
-        
-        longitude_ = 0F;
-        onChanged();
-        return this;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.GPS_Position, context.ContextOuterClass.GPS_Position.Builder, context.ContextOuterClass.GPS_PositionOrBuilder> 
+          getGpsPositionFieldBuilder() {
+        if (gpsPositionBuilder_ == null) {
+          if (!(locationCase_ == 2)) {
+            location_ = context.ContextOuterClass.GPS_Position.getDefaultInstance();
+          }
+          gpsPositionBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.GPS_Position, context.ContextOuterClass.GPS_Position.Builder, context.ContextOuterClass.GPS_PositionOrBuilder>(
+                  (context.ContextOuterClass.GPS_Position) location_,
+                  getParentForChildren(),
+                  isClean());
+          location_ = null;
+        }
+        locationCase_ = 2;
+        onChanged();;
+        return gpsPositionBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -52009,104 +53920,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.GPS_Position)
+      // @@protoc_insertion_point(builder_scope:context.Location)
     }
 
-    // @@protoc_insertion_point(class_scope:context.GPS_Position)
-    private static final context.ContextOuterClass.GPS_Position DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Location)
+    private static final context.ContextOuterClass.Location DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.GPS_Position();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Location();
     }
 
-    public static context.ContextOuterClass.GPS_Position getDefaultInstance() {
+    public static context.ContextOuterClass.Location getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<GPS_Position>
-        PARSER = new com.google.protobuf.AbstractParser<GPS_Position>() {
+    private static final com.google.protobuf.Parser<Location>
+        PARSER = new com.google.protobuf.AbstractParser<Location>() {
       @java.lang.Override
-      public GPS_Position parsePartialFrom(
+      public Location parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new GPS_Position(input, extensionRegistry);
+        return new Location(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<GPS_Position> parser() {
+    public static com.google.protobuf.Parser<Location> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<GPS_Position> getParserForType() {
+    public com.google.protobuf.Parser<Location> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.GPS_Position getDefaultInstanceForType() {
+    public context.ContextOuterClass.Location getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface LocationOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Location)
+  public interface Constraint_EndPointLocationOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_EndPointLocation)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>string region = 1;</code>
-     * @return Whether the region field is set.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
-    boolean hasRegion();
+    boolean hasEndpointId();
     /**
-     * <code>string region = 1;</code>
-     * @return The region.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
-    java.lang.String getRegion();
+    context.ContextOuterClass.EndPointId getEndpointId();
     /**
-     * <code>string region = 1;</code>
-     * @return The bytes for region.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
      */
-    com.google.protobuf.ByteString
-        getRegionBytes();
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
 
     /**
-     * <code>.context.GPS_Position gps_position = 2;</code>
-     * @return Whether the gpsPosition field is set.
+     * <code>.context.Location location = 2;</code>
+     * @return Whether the location field is set.
      */
-    boolean hasGpsPosition();
+    boolean hasLocation();
     /**
-     * <code>.context.GPS_Position gps_position = 2;</code>
-     * @return The gpsPosition.
+     * <code>.context.Location location = 2;</code>
+     * @return The location.
      */
-    context.ContextOuterClass.GPS_Position getGpsPosition();
+    context.ContextOuterClass.Location getLocation();
     /**
-     * <code>.context.GPS_Position gps_position = 2;</code>
+     * <code>.context.Location location = 2;</code>
      */
-    context.ContextOuterClass.GPS_PositionOrBuilder getGpsPositionOrBuilder();
-
-    public context.ContextOuterClass.Location.LocationCase getLocationCase();
+    context.ContextOuterClass.LocationOrBuilder getLocationOrBuilder();
   }
   /**
-   * Protobuf type {@code context.Location}
+   * Protobuf type {@code context.Constraint_EndPointLocation}
    */
-  public static final class Location extends
+  public static final class Constraint_EndPointLocation extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Location)
-      LocationOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Constraint_EndPointLocation)
+      Constraint_EndPointLocationOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Location.newBuilder() to construct.
-    private Location(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Constraint_EndPointLocation.newBuilder() to construct.
+    private Constraint_EndPointLocation(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Location() {
+    private Constraint_EndPointLocation() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Location();
+      return new Constraint_EndPointLocation();
     }
 
     @java.lang.Override
@@ -52114,7 +54021,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Location(
+    private Constraint_EndPointLocation(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -52133,23 +54040,29 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              java.lang.String s = input.readStringRequireUtf8();
-              locationCase_ = 1;
-              location_ = s;
+              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
+              if (endpointId_ != null) {
+                subBuilder = endpointId_.toBuilder();
+              }
+              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endpointId_);
+                endpointId_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             case 18: {
-              context.ContextOuterClass.GPS_Position.Builder subBuilder = null;
-              if (locationCase_ == 2) {
-                subBuilder = ((context.ContextOuterClass.GPS_Position) location_).toBuilder();
+              context.ContextOuterClass.Location.Builder subBuilder = null;
+              if (location_ != null) {
+                subBuilder = location_.toBuilder();
               }
-              location_ =
-                  input.readMessage(context.ContextOuterClass.GPS_Position.parser(), extensionRegistry);
+              location_ = input.readMessage(context.ContextOuterClass.Location.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom((context.ContextOuterClass.GPS_Position) location_);
+                subBuilder.mergeFrom(location_);
                 location_ = subBuilder.buildPartial();
               }
-              locationCase_ = 2;
+
               break;
             }
             default: {
@@ -52173,139 +54086,67 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Location_descriptor;
+      return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Location_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Location.class, context.ContextOuterClass.Location.Builder.class);
-    }
-
-    private int locationCase_ = 0;
-    private java.lang.Object location_;
-    public enum LocationCase
-        implements com.google.protobuf.Internal.EnumLite,
-            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
-      REGION(1),
-      GPS_POSITION(2),
-      LOCATION_NOT_SET(0);
-      private final int value;
-      private LocationCase(int value) {
-        this.value = value;
-      }
-      /**
-       * @param value The number of the enum to look for.
-       * @return The enum associated with the given number.
-       * @deprecated Use {@link #forNumber(int)} instead.
-       */
-      @java.lang.Deprecated
-      public static LocationCase valueOf(int value) {
-        return forNumber(value);
-      }
-
-      public static LocationCase forNumber(int value) {
-        switch (value) {
-          case 1: return REGION;
-          case 2: return GPS_POSITION;
-          case 0: return LOCATION_NOT_SET;
-          default: return null;
-        }
-      }
-      public int getNumber() {
-        return this.value;
-      }
-    };
-
-    public LocationCase
-    getLocationCase() {
-      return LocationCase.forNumber(
-          locationCase_);
+              context.ContextOuterClass.Constraint_EndPointLocation.class, context.ContextOuterClass.Constraint_EndPointLocation.Builder.class);
     }
 
-    public static final int REGION_FIELD_NUMBER = 1;
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.EndPointId endpointId_;
     /**
-     * <code>string region = 1;</code>
-     * @return Whether the region field is set.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
-    public boolean hasRegion() {
-      return locationCase_ == 1;
+    @java.lang.Override
+    public boolean hasEndpointId() {
+      return endpointId_ != null;
     }
     /**
-     * <code>string region = 1;</code>
-     * @return The region.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
-    public java.lang.String getRegion() {
-      java.lang.Object ref = "";
-      if (locationCase_ == 1) {
-        ref = location_;
-      }
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        if (locationCase_ == 1) {
-          location_ = s;
-        }
-        return s;
-      }
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getEndpointId() {
+      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
     }
     /**
-     * <code>string region = 1;</code>
-     * @return The bytes for region.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
      */
-    public com.google.protobuf.ByteString
-        getRegionBytes() {
-      java.lang.Object ref = "";
-      if (locationCase_ == 1) {
-        ref = location_;
-      }
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        if (locationCase_ == 1) {
-          location_ = b;
-        }
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+      return getEndpointId();
     }
 
-    public static final int GPS_POSITION_FIELD_NUMBER = 2;
-    /**
-     * <code>.context.GPS_Position gps_position = 2;</code>
-     * @return Whether the gpsPosition field is set.
+    public static final int LOCATION_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.Location location_;
+    /**
+     * <code>.context.Location location = 2;</code>
+     * @return Whether the location field is set.
      */
     @java.lang.Override
-    public boolean hasGpsPosition() {
-      return locationCase_ == 2;
+    public boolean hasLocation() {
+      return location_ != null;
     }
     /**
-     * <code>.context.GPS_Position gps_position = 2;</code>
-     * @return The gpsPosition.
+     * <code>.context.Location location = 2;</code>
+     * @return The location.
      */
     @java.lang.Override
-    public context.ContextOuterClass.GPS_Position getGpsPosition() {
-      if (locationCase_ == 2) {
-         return (context.ContextOuterClass.GPS_Position) location_;
-      }
-      return context.ContextOuterClass.GPS_Position.getDefaultInstance();
+    public context.ContextOuterClass.Location getLocation() {
+      return location_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : location_;
     }
     /**
-     * <code>.context.GPS_Position gps_position = 2;</code>
+     * <code>.context.Location location = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.GPS_PositionOrBuilder getGpsPositionOrBuilder() {
-      if (locationCase_ == 2) {
-         return (context.ContextOuterClass.GPS_Position) location_;
-      }
-      return context.ContextOuterClass.GPS_Position.getDefaultInstance();
+    public context.ContextOuterClass.LocationOrBuilder getLocationOrBuilder() {
+      return getLocation();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -52322,11 +54163,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (locationCase_ == 1) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, location_);
+      if (endpointId_ != null) {
+        output.writeMessage(1, getEndpointId());
       }
-      if (locationCase_ == 2) {
-        output.writeMessage(2, (context.ContextOuterClass.GPS_Position) location_);
+      if (location_ != null) {
+        output.writeMessage(2, getLocation());
       }
       unknownFields.writeTo(output);
     }
@@ -52337,12 +54178,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (locationCase_ == 1) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, location_);
+      if (endpointId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getEndpointId());
       }
-      if (locationCase_ == 2) {
+      if (location_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, (context.ContextOuterClass.GPS_Position) location_);
+          .computeMessageSize(2, getLocation());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -52354,23 +54196,20 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Location)) {
+      if (!(obj instanceof context.ContextOuterClass.Constraint_EndPointLocation)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Location other = (context.ContextOuterClass.Location) obj;
+      context.ContextOuterClass.Constraint_EndPointLocation other = (context.ContextOuterClass.Constraint_EndPointLocation) obj;
 
-      if (!getLocationCase().equals(other.getLocationCase())) return false;
-      switch (locationCase_) {
-        case 1:
-          if (!getRegion()
-              .equals(other.getRegion())) return false;
-          break;
-        case 2:
-          if (!getGpsPosition()
-              .equals(other.getGpsPosition())) return false;
-          break;
-        case 0:
-        default:
+      if (hasEndpointId() != other.hasEndpointId()) return false;
+      if (hasEndpointId()) {
+        if (!getEndpointId()
+            .equals(other.getEndpointId())) return false;
+      }
+      if (hasLocation() != other.hasLocation()) return false;
+      if (hasLocation()) {
+        if (!getLocation()
+            .equals(other.getLocation())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -52383,86 +54222,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      switch (locationCase_) {
-        case 1:
-          hash = (37 * hash) + REGION_FIELD_NUMBER;
-          hash = (53 * hash) + getRegion().hashCode();
-          break;
-        case 2:
-          hash = (37 * hash) + GPS_POSITION_FIELD_NUMBER;
-          hash = (53 * hash) + getGpsPosition().hashCode();
-          break;
-        case 0:
-        default:
+      if (hasEndpointId()) {
+        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointId().hashCode();
+      }
+      if (hasLocation()) {
+        hash = (37 * hash) + LOCATION_FIELD_NUMBER;
+        hash = (53 * hash) + getLocation().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Location parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Location parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Location parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Location parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Location parseFrom(byte[] data)
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Location parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Location parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Location parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Location parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Location parseDelimitedFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Location parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Location parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -52475,7 +54310,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Location prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Constraint_EndPointLocation prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -52491,26 +54326,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Location}
+     * Protobuf type {@code context.Constraint_EndPointLocation}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Location)
-        context.ContextOuterClass.LocationOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Constraint_EndPointLocation)
+        context.ContextOuterClass.Constraint_EndPointLocationOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Location_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Location_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Location.class, context.ContextOuterClass.Location.Builder.class);
+                context.ContextOuterClass.Constraint_EndPointLocation.class, context.ContextOuterClass.Constraint_EndPointLocation.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Location.newBuilder()
+      // Construct using context.ContextOuterClass.Constraint_EndPointLocation.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -52528,25 +54363,35 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        locationCase_ = 0;
-        location_ = null;
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+        if (locationBuilder_ == null) {
+          location_ = null;
+        } else {
+          location_ = null;
+          locationBuilder_ = null;
+        }
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Location_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Location getDefaultInstanceForType() {
-        return context.ContextOuterClass.Location.getDefaultInstance();
+      public context.ContextOuterClass.Constraint_EndPointLocation getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Location build() {
-        context.ContextOuterClass.Location result = buildPartial();
+      public context.ContextOuterClass.Constraint_EndPointLocation build() {
+        context.ContextOuterClass.Constraint_EndPointLocation result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -52554,19 +54399,18 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Location buildPartial() {
-        context.ContextOuterClass.Location result = new context.ContextOuterClass.Location(this);
-        if (locationCase_ == 1) {
-          result.location_ = location_;
+      public context.ContextOuterClass.Constraint_EndPointLocation buildPartial() {
+        context.ContextOuterClass.Constraint_EndPointLocation result = new context.ContextOuterClass.Constraint_EndPointLocation(this);
+        if (endpointIdBuilder_ == null) {
+          result.endpointId_ = endpointId_;
+        } else {
+          result.endpointId_ = endpointIdBuilder_.build();
         }
-        if (locationCase_ == 2) {
-          if (gpsPositionBuilder_ == null) {
-            result.location_ = location_;
-          } else {
-            result.location_ = gpsPositionBuilder_.build();
-          }
+        if (locationBuilder_ == null) {
+          result.location_ = location_;
+        } else {
+          result.location_ = locationBuilder_.build();
         }
-        result.locationCase_ = locationCase_;
         onBuilt();
         return result;
       }
@@ -52605,30 +54449,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Location) {
-          return mergeFrom((context.ContextOuterClass.Location)other);
+        if (other instanceof context.ContextOuterClass.Constraint_EndPointLocation) {
+          return mergeFrom((context.ContextOuterClass.Constraint_EndPointLocation)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Location other) {
-        if (other == context.ContextOuterClass.Location.getDefaultInstance()) return this;
-        switch (other.getLocationCase()) {
-          case REGION: {
-            locationCase_ = 1;
-            location_ = other.location_;
-            onChanged();
-            break;
-          }
-          case GPS_POSITION: {
-            mergeGpsPosition(other.getGpsPosition());
-            break;
-          }
-          case LOCATION_NOT_SET: {
-            break;
-          }
+      public Builder mergeFrom(context.ContextOuterClass.Constraint_EndPointLocation other) {
+        if (other == context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance()) return this;
+        if (other.hasEndpointId()) {
+          mergeEndpointId(other.getEndpointId());
+        }
+        if (other.hasLocation()) {
+          mergeLocation(other.getLocation());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -52645,11 +54480,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Location parsedMessage = null;
+        context.ContextOuterClass.Constraint_EndPointLocation parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Location) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Constraint_EndPointLocation) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -52658,258 +54493,243 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int locationCase_ = 0;
-      private java.lang.Object location_;
-      public LocationCase
-          getLocationCase() {
-        return LocationCase.forNumber(
-            locationCase_);
-      }
-
-      public Builder clearLocation() {
-        locationCase_ = 0;
-        location_ = null;
-        onChanged();
-        return this;
-      }
-
 
+      private context.ContextOuterClass.EndPointId endpointId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
       /**
-       * <code>string region = 1;</code>
-       * @return Whether the region field is set.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return Whether the endpointId field is set.
        */
-      @java.lang.Override
-      public boolean hasRegion() {
-        return locationCase_ == 1;
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
       }
       /**
-       * <code>string region = 1;</code>
-       * @return The region.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return The endpointId.
        */
-      @java.lang.Override
-      public java.lang.String getRegion() {
-        java.lang.Object ref = "";
-        if (locationCase_ == 1) {
-          ref = location_;
+      public context.ContextOuterClass.EndPointId getEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        } else {
+          return endpointIdBuilder_.getMessage();
         }
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          if (locationCase_ == 1) {
-            location_ = s;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
-          return s;
+          endpointId_ = value;
+          onChanged();
         } else {
-          return (java.lang.String) ref;
+          endpointIdBuilder_.setMessage(value);
         }
+
+        return this;
       }
       /**
-       * <code>string region = 1;</code>
-       * @return The bytes for region.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      @java.lang.Override
-      public com.google.protobuf.ByteString
-          getRegionBytes() {
-        java.lang.Object ref = "";
-        if (locationCase_ == 1) {
-          ref = location_;
-        }
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          if (locationCase_ == 1) {
-            location_ = b;
-          }
-          return b;
+      public Builder setEndpointId(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = builderForValue.build();
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          endpointIdBuilder_.setMessage(builderForValue.build());
         }
+
+        return this;
       }
       /**
-       * <code>string region = 1;</code>
-       * @param value The region to set.
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setRegion(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  locationCase_ = 1;
-        location_ = value;
-        onChanged();
+      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (endpointId_ != null) {
+            endpointId_ =
+              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+          } else {
+            endpointId_ = value;
+          }
+          onChanged();
+        } else {
+          endpointIdBuilder_.mergeFrom(value);
+        }
+
         return this;
       }
       /**
-       * <code>string region = 1;</code>
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder clearRegion() {
-        if (locationCase_ == 1) {
-          locationCase_ = 0;
-          location_ = null;
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
           onChanged();
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>string region = 1;</code>
-       * @param value The bytes for region to set.
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setRegionBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        locationCase_ = 1;
-        location_ = value;
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+        
         onChanged();
-        return this;
+        return getEndpointIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+        if (endpointIdBuilder_ != null) {
+          return endpointIdBuilder_.getMessageOrBuilder();
+        } else {
+          return endpointId_ == null ?
+              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        }
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getEndpointIdFieldBuilder() {
+        if (endpointIdBuilder_ == null) {
+          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  getEndpointId(),
+                  getParentForChildren(),
+                  isClean());
+          endpointId_ = null;
+        }
+        return endpointIdBuilder_;
       }
 
+      private context.ContextOuterClass.Location location_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.GPS_Position, context.ContextOuterClass.GPS_Position.Builder, context.ContextOuterClass.GPS_PositionOrBuilder> gpsPositionBuilder_;
+          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> locationBuilder_;
       /**
-       * <code>.context.GPS_Position gps_position = 2;</code>
-       * @return Whether the gpsPosition field is set.
+       * <code>.context.Location location = 2;</code>
+       * @return Whether the location field is set.
        */
-      @java.lang.Override
-      public boolean hasGpsPosition() {
-        return locationCase_ == 2;
+      public boolean hasLocation() {
+        return locationBuilder_ != null || location_ != null;
       }
       /**
-       * <code>.context.GPS_Position gps_position = 2;</code>
-       * @return The gpsPosition.
+       * <code>.context.Location location = 2;</code>
+       * @return The location.
        */
-      @java.lang.Override
-      public context.ContextOuterClass.GPS_Position getGpsPosition() {
-        if (gpsPositionBuilder_ == null) {
-          if (locationCase_ == 2) {
-            return (context.ContextOuterClass.GPS_Position) location_;
-          }
-          return context.ContextOuterClass.GPS_Position.getDefaultInstance();
+      public context.ContextOuterClass.Location getLocation() {
+        if (locationBuilder_ == null) {
+          return location_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : location_;
         } else {
-          if (locationCase_ == 2) {
-            return gpsPositionBuilder_.getMessage();
-          }
-          return context.ContextOuterClass.GPS_Position.getDefaultInstance();
+          return locationBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.GPS_Position gps_position = 2;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      public Builder setGpsPosition(context.ContextOuterClass.GPS_Position value) {
-        if (gpsPositionBuilder_ == null) {
+      public Builder setLocation(context.ContextOuterClass.Location value) {
+        if (locationBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
           location_ = value;
           onChanged();
         } else {
-          gpsPositionBuilder_.setMessage(value);
+          locationBuilder_.setMessage(value);
         }
-        locationCase_ = 2;
+
         return this;
       }
       /**
-       * <code>.context.GPS_Position gps_position = 2;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      public Builder setGpsPosition(
-          context.ContextOuterClass.GPS_Position.Builder builderForValue) {
-        if (gpsPositionBuilder_ == null) {
+      public Builder setLocation(
+          context.ContextOuterClass.Location.Builder builderForValue) {
+        if (locationBuilder_ == null) {
           location_ = builderForValue.build();
           onChanged();
         } else {
-          gpsPositionBuilder_.setMessage(builderForValue.build());
+          locationBuilder_.setMessage(builderForValue.build());
         }
-        locationCase_ = 2;
+
         return this;
       }
       /**
-       * <code>.context.GPS_Position gps_position = 2;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      public Builder mergeGpsPosition(context.ContextOuterClass.GPS_Position value) {
-        if (gpsPositionBuilder_ == null) {
-          if (locationCase_ == 2 &&
-              location_ != context.ContextOuterClass.GPS_Position.getDefaultInstance()) {
-            location_ = context.ContextOuterClass.GPS_Position.newBuilder((context.ContextOuterClass.GPS_Position) location_)
-                .mergeFrom(value).buildPartial();
+      public Builder mergeLocation(context.ContextOuterClass.Location value) {
+        if (locationBuilder_ == null) {
+          if (location_ != null) {
+            location_ =
+              context.ContextOuterClass.Location.newBuilder(location_).mergeFrom(value).buildPartial();
           } else {
             location_ = value;
           }
           onChanged();
         } else {
-          if (locationCase_ == 2) {
-            gpsPositionBuilder_.mergeFrom(value);
-          }
-          gpsPositionBuilder_.setMessage(value);
+          locationBuilder_.mergeFrom(value);
         }
-        locationCase_ = 2;
+
         return this;
       }
       /**
-       * <code>.context.GPS_Position gps_position = 2;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      public Builder clearGpsPosition() {
-        if (gpsPositionBuilder_ == null) {
-          if (locationCase_ == 2) {
-            locationCase_ = 0;
-            location_ = null;
-            onChanged();
-          }
+      public Builder clearLocation() {
+        if (locationBuilder_ == null) {
+          location_ = null;
+          onChanged();
         } else {
-          if (locationCase_ == 2) {
-            locationCase_ = 0;
-            location_ = null;
-          }
-          gpsPositionBuilder_.clear();
+          location_ = null;
+          locationBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>.context.GPS_Position gps_position = 2;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      public context.ContextOuterClass.GPS_Position.Builder getGpsPositionBuilder() {
-        return getGpsPositionFieldBuilder().getBuilder();
+      public context.ContextOuterClass.Location.Builder getLocationBuilder() {
+        
+        onChanged();
+        return getLocationFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.GPS_Position gps_position = 2;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      @java.lang.Override
-      public context.ContextOuterClass.GPS_PositionOrBuilder getGpsPositionOrBuilder() {
-        if ((locationCase_ == 2) && (gpsPositionBuilder_ != null)) {
-          return gpsPositionBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.LocationOrBuilder getLocationOrBuilder() {
+        if (locationBuilder_ != null) {
+          return locationBuilder_.getMessageOrBuilder();
         } else {
-          if (locationCase_ == 2) {
-            return (context.ContextOuterClass.GPS_Position) location_;
-          }
-          return context.ContextOuterClass.GPS_Position.getDefaultInstance();
+          return location_ == null ?
+              context.ContextOuterClass.Location.getDefaultInstance() : location_;
         }
       }
       /**
-       * <code>.context.GPS_Position gps_position = 2;</code>
+       * <code>.context.Location location = 2;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.GPS_Position, context.ContextOuterClass.GPS_Position.Builder, context.ContextOuterClass.GPS_PositionOrBuilder> 
-          getGpsPositionFieldBuilder() {
-        if (gpsPositionBuilder_ == null) {
-          if (!(locationCase_ == 2)) {
-            location_ = context.ContextOuterClass.GPS_Position.getDefaultInstance();
-          }
-          gpsPositionBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.GPS_Position, context.ContextOuterClass.GPS_Position.Builder, context.ContextOuterClass.GPS_PositionOrBuilder>(
-                  (context.ContextOuterClass.GPS_Position) location_,
+          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> 
+          getLocationFieldBuilder() {
+        if (locationBuilder_ == null) {
+          locationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder>(
+                  getLocation(),
                   getParentForChildren(),
                   isClean());
           location_ = null;
         }
-        locationCase_ = 2;
-        onChanged();;
-        return gpsPositionBuilder_;
+        return locationBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -52924,48 +54744,48 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Location)
+      // @@protoc_insertion_point(builder_scope:context.Constraint_EndPointLocation)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Location)
-    private static final context.ContextOuterClass.Location DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Constraint_EndPointLocation)
+    private static final context.ContextOuterClass.Constraint_EndPointLocation DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Location();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_EndPointLocation();
     }
 
-    public static context.ContextOuterClass.Location getDefaultInstance() {
+    public static context.ContextOuterClass.Constraint_EndPointLocation getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Location>
-        PARSER = new com.google.protobuf.AbstractParser<Location>() {
+    private static final com.google.protobuf.Parser<Constraint_EndPointLocation>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_EndPointLocation>() {
       @java.lang.Override
-      public Location parsePartialFrom(
+      public Constraint_EndPointLocation parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Location(input, extensionRegistry);
+        return new Constraint_EndPointLocation(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Location> parser() {
+    public static com.google.protobuf.Parser<Constraint_EndPointLocation> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Location> getParserForType() {
+    public com.google.protobuf.Parser<Constraint_EndPointLocation> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Location getDefaultInstanceForType() {
+    public context.ContextOuterClass.Constraint_EndPointLocation getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface Constraint_EndPointLocationOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Constraint_EndPointLocation)
+  public interface Constraint_EndPointPriorityOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_EndPointPriority)
       com.google.protobuf.MessageOrBuilder {
 
     /**
@@ -52984,40 +54804,31 @@ public final class ContextOuterClass {
     context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
 
     /**
-     * <code>.context.Location location = 2;</code>
-     * @return Whether the location field is set.
-     */
-    boolean hasLocation();
-    /**
-     * <code>.context.Location location = 2;</code>
-     * @return The location.
-     */
-    context.ContextOuterClass.Location getLocation();
-    /**
-     * <code>.context.Location location = 2;</code>
+     * <code>uint32 priority = 2;</code>
+     * @return The priority.
      */
-    context.ContextOuterClass.LocationOrBuilder getLocationOrBuilder();
+    int getPriority();
   }
   /**
-   * Protobuf type {@code context.Constraint_EndPointLocation}
+   * Protobuf type {@code context.Constraint_EndPointPriority}
    */
-  public static final class Constraint_EndPointLocation extends
+  public static final class Constraint_EndPointPriority extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Constraint_EndPointLocation)
-      Constraint_EndPointLocationOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Constraint_EndPointPriority)
+      Constraint_EndPointPriorityOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Constraint_EndPointLocation.newBuilder() to construct.
-    private Constraint_EndPointLocation(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Constraint_EndPointPriority.newBuilder() to construct.
+    private Constraint_EndPointPriority(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Constraint_EndPointLocation() {
+    private Constraint_EndPointPriority() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Constraint_EndPointLocation();
+      return new Constraint_EndPointPriority();
     }
 
     @java.lang.Override
@@ -53025,7 +54836,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Constraint_EndPointLocation(
+    private Constraint_EndPointPriority(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -53056,17 +54867,9 @@ public final class ContextOuterClass {
 
               break;
             }
-            case 18: {
-              context.ContextOuterClass.Location.Builder subBuilder = null;
-              if (location_ != null) {
-                subBuilder = location_.toBuilder();
-              }
-              location_ = input.readMessage(context.ContextOuterClass.Location.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(location_);
-                location_ = subBuilder.buildPartial();
-              }
+            case 16: {
 
+              priority_ = input.readUInt32();
               break;
             }
             default: {
@@ -53090,15 +54893,15 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_descriptor;
+      return context.ContextOuterClass.internal_static_context_Constraint_EndPointPriority_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Constraint_EndPointPriority_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Constraint_EndPointLocation.class, context.ContextOuterClass.Constraint_EndPointLocation.Builder.class);
+              context.ContextOuterClass.Constraint_EndPointPriority.class, context.ContextOuterClass.Constraint_EndPointPriority.Builder.class);
     }
 
     public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
@@ -53127,30 +54930,15 @@ public final class ContextOuterClass {
       return getEndpointId();
     }
 
-    public static final int LOCATION_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.Location location_;
-    /**
-     * <code>.context.Location location = 2;</code>
-     * @return Whether the location field is set.
-     */
-    @java.lang.Override
-    public boolean hasLocation() {
-      return location_ != null;
-    }
-    /**
-     * <code>.context.Location location = 2;</code>
-     * @return The location.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.Location getLocation() {
-      return location_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : location_;
-    }
+    public static final int PRIORITY_FIELD_NUMBER = 2;
+    private int priority_;
     /**
-     * <code>.context.Location location = 2;</code>
+     * <code>uint32 priority = 2;</code>
+     * @return The priority.
      */
     @java.lang.Override
-    public context.ContextOuterClass.LocationOrBuilder getLocationOrBuilder() {
-      return getLocation();
+    public int getPriority() {
+      return priority_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -53170,8 +54958,8 @@ public final class ContextOuterClass {
       if (endpointId_ != null) {
         output.writeMessage(1, getEndpointId());
       }
-      if (location_ != null) {
-        output.writeMessage(2, getLocation());
+      if (priority_ != 0) {
+        output.writeUInt32(2, priority_);
       }
       unknownFields.writeTo(output);
     }
@@ -53186,9 +54974,9 @@ public final class ContextOuterClass {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(1, getEndpointId());
       }
-      if (location_ != null) {
+      if (priority_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getLocation());
+          .computeUInt32Size(2, priority_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -53200,21 +54988,18 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Constraint_EndPointLocation)) {
+      if (!(obj instanceof context.ContextOuterClass.Constraint_EndPointPriority)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Constraint_EndPointLocation other = (context.ContextOuterClass.Constraint_EndPointLocation) obj;
+      context.ContextOuterClass.Constraint_EndPointPriority other = (context.ContextOuterClass.Constraint_EndPointPriority) obj;
 
       if (hasEndpointId() != other.hasEndpointId()) return false;
       if (hasEndpointId()) {
         if (!getEndpointId()
             .equals(other.getEndpointId())) return false;
       }
-      if (hasLocation() != other.hasLocation()) return false;
-      if (hasLocation()) {
-        if (!getLocation()
-            .equals(other.getLocation())) return false;
-      }
+      if (getPriority()
+          != other.getPriority()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -53230,78 +55015,76 @@ public final class ContextOuterClass {
         hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
         hash = (53 * hash) + getEndpointId().hashCode();
       }
-      if (hasLocation()) {
-        hash = (37 * hash) + LOCATION_FIELD_NUMBER;
-        hash = (53 * hash) + getLocation().hashCode();
-      }
+      hash = (37 * hash) + PRIORITY_FIELD_NUMBER;
+      hash = (53 * hash) + getPriority();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(byte[] data)
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseDelimitedFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -53314,7 +55097,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Constraint_EndPointLocation prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Constraint_EndPointPriority prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -53330,26 +55113,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Constraint_EndPointLocation}
+     * Protobuf type {@code context.Constraint_EndPointPriority}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Constraint_EndPointLocation)
-        context.ContextOuterClass.Constraint_EndPointLocationOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Constraint_EndPointPriority)
+        context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_EndPointPriority_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Constraint_EndPointPriority_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Constraint_EndPointLocation.class, context.ContextOuterClass.Constraint_EndPointLocation.Builder.class);
+                context.ContextOuterClass.Constraint_EndPointPriority.class, context.ContextOuterClass.Constraint_EndPointPriority.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Constraint_EndPointLocation.newBuilder()
+      // Construct using context.ContextOuterClass.Constraint_EndPointPriority.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -53373,29 +55156,25 @@ public final class ContextOuterClass {
           endpointId_ = null;
           endpointIdBuilder_ = null;
         }
-        if (locationBuilder_ == null) {
-          location_ = null;
-        } else {
-          location_ = null;
-          locationBuilder_ = null;
-        }
+        priority_ = 0;
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_EndPointPriority_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_EndPointLocation getDefaultInstanceForType() {
-        return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
+      public context.ContextOuterClass.Constraint_EndPointPriority getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_EndPointLocation build() {
-        context.ContextOuterClass.Constraint_EndPointLocation result = buildPartial();
+      public context.ContextOuterClass.Constraint_EndPointPriority build() {
+        context.ContextOuterClass.Constraint_EndPointPriority result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -53403,18 +55182,14 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_EndPointLocation buildPartial() {
-        context.ContextOuterClass.Constraint_EndPointLocation result = new context.ContextOuterClass.Constraint_EndPointLocation(this);
+      public context.ContextOuterClass.Constraint_EndPointPriority buildPartial() {
+        context.ContextOuterClass.Constraint_EndPointPriority result = new context.ContextOuterClass.Constraint_EndPointPriority(this);
         if (endpointIdBuilder_ == null) {
           result.endpointId_ = endpointId_;
         } else {
           result.endpointId_ = endpointIdBuilder_.build();
         }
-        if (locationBuilder_ == null) {
-          result.location_ = location_;
-        } else {
-          result.location_ = locationBuilder_.build();
-        }
+        result.priority_ = priority_;
         onBuilt();
         return result;
       }
@@ -53453,21 +55228,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Constraint_EndPointLocation) {
-          return mergeFrom((context.ContextOuterClass.Constraint_EndPointLocation)other);
+        if (other instanceof context.ContextOuterClass.Constraint_EndPointPriority) {
+          return mergeFrom((context.ContextOuterClass.Constraint_EndPointPriority)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Constraint_EndPointLocation other) {
-        if (other == context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance()) return this;
+      public Builder mergeFrom(context.ContextOuterClass.Constraint_EndPointPriority other) {
+        if (other == context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance()) return this;
         if (other.hasEndpointId()) {
           mergeEndpointId(other.getEndpointId());
         }
-        if (other.hasLocation()) {
-          mergeLocation(other.getLocation());
+        if (other.getPriority() != 0) {
+          setPriority(other.getPriority());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -53484,11 +55259,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Constraint_EndPointLocation parsedMessage = null;
+        context.ContextOuterClass.Constraint_EndPointPriority parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Constraint_EndPointLocation) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Constraint_EndPointPriority) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -53617,123 +55392,35 @@ public final class ContextOuterClass {
         return endpointIdBuilder_;
       }
 
-      private context.ContextOuterClass.Location location_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> locationBuilder_;
-      /**
-       * <code>.context.Location location = 2;</code>
-       * @return Whether the location field is set.
-       */
-      public boolean hasLocation() {
-        return locationBuilder_ != null || location_ != null;
-      }
-      /**
-       * <code>.context.Location location = 2;</code>
-       * @return The location.
-       */
-      public context.ContextOuterClass.Location getLocation() {
-        if (locationBuilder_ == null) {
-          return location_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : location_;
-        } else {
-          return locationBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.Location location = 2;</code>
-       */
-      public Builder setLocation(context.ContextOuterClass.Location value) {
-        if (locationBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          location_ = value;
-          onChanged();
-        } else {
-          locationBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.Location location = 2;</code>
-       */
-      public Builder setLocation(
-          context.ContextOuterClass.Location.Builder builderForValue) {
-        if (locationBuilder_ == null) {
-          location_ = builderForValue.build();
-          onChanged();
-        } else {
-          locationBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.Location location = 2;</code>
-       */
-      public Builder mergeLocation(context.ContextOuterClass.Location value) {
-        if (locationBuilder_ == null) {
-          if (location_ != null) {
-            location_ =
-              context.ContextOuterClass.Location.newBuilder(location_).mergeFrom(value).buildPartial();
-          } else {
-            location_ = value;
-          }
-          onChanged();
-        } else {
-          locationBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
+      private int priority_ ;
       /**
-       * <code>.context.Location location = 2;</code>
+       * <code>uint32 priority = 2;</code>
+       * @return The priority.
        */
-      public Builder clearLocation() {
-        if (locationBuilder_ == null) {
-          location_ = null;
-          onChanged();
-        } else {
-          location_ = null;
-          locationBuilder_ = null;
-        }
-
-        return this;
+      @java.lang.Override
+      public int getPriority() {
+        return priority_;
       }
       /**
-       * <code>.context.Location location = 2;</code>
+       * <code>uint32 priority = 2;</code>
+       * @param value The priority to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.Location.Builder getLocationBuilder() {
+      public Builder setPriority(int value) {
         
+        priority_ = value;
         onChanged();
-        return getLocationFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.Location location = 2;</code>
-       */
-      public context.ContextOuterClass.LocationOrBuilder getLocationOrBuilder() {
-        if (locationBuilder_ != null) {
-          return locationBuilder_.getMessageOrBuilder();
-        } else {
-          return location_ == null ?
-              context.ContextOuterClass.Location.getDefaultInstance() : location_;
-        }
+        return this;
       }
-      /**
-       * <code>.context.Location location = 2;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> 
-          getLocationFieldBuilder() {
-        if (locationBuilder_ == null) {
-          locationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder>(
-                  getLocation(),
-                  getParentForChildren(),
-                  isClean());
-          location_ = null;
-        }
-        return locationBuilder_;
+      /**
+       * <code>uint32 priority = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearPriority() {
+        
+        priority_ = 0;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -53748,41 +55435,41 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Constraint_EndPointLocation)
+      // @@protoc_insertion_point(builder_scope:context.Constraint_EndPointPriority)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Constraint_EndPointLocation)
-    private static final context.ContextOuterClass.Constraint_EndPointLocation DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Constraint_EndPointPriority)
+    private static final context.ContextOuterClass.Constraint_EndPointPriority DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_EndPointLocation();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_EndPointPriority();
     }
 
-    public static context.ContextOuterClass.Constraint_EndPointLocation getDefaultInstance() {
+    public static context.ContextOuterClass.Constraint_EndPointPriority getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Constraint_EndPointLocation>
-        PARSER = new com.google.protobuf.AbstractParser<Constraint_EndPointLocation>() {
+    private static final com.google.protobuf.Parser<Constraint_EndPointPriority>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_EndPointPriority>() {
       @java.lang.Override
-      public Constraint_EndPointLocation parsePartialFrom(
+      public Constraint_EndPointPriority parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Constraint_EndPointLocation(input, extensionRegistry);
+        return new Constraint_EndPointPriority(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Constraint_EndPointLocation> parser() {
+    public static com.google.protobuf.Parser<Constraint_EndPointPriority> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Constraint_EndPointLocation> getParserForType() {
+    public com.google.protobuf.Parser<Constraint_EndPointPriority> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Constraint_EndPointLocation getDefaultInstanceForType() {
+    public context.ContextOuterClass.Constraint_EndPointPriority getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
@@ -55332,15 +57019,33 @@ public final class ContextOuterClass {
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
-     * @return The enum numeric value on the wire for isolationLevel.
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return A list containing the isolationLevel.
+     */
+    java.util.List<context.ContextOuterClass.IsolationLevelEnum> getIsolationLevelList();
+    /**
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return The count of isolationLevel.
+     */
+    int getIsolationLevelCount();
+    /**
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @param index The index of the element to return.
+     * @return The isolationLevel at the given index.
+     */
+    context.ContextOuterClass.IsolationLevelEnum getIsolationLevel(int index);
+    /**
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return A list containing the enum numeric values on the wire for isolationLevel.
      */
-    int getIsolationLevelValue();
+    java.util.List<java.lang.Integer>
+    getIsolationLevelValueList();
     /**
-     * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
-     * @return The isolationLevel.
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of isolationLevel at the given index.
      */
-    context.ContextOuterClass.IsolationLevelEnum getIsolationLevel();
+    int getIsolationLevelValue(int index);
   }
   /**
    * Protobuf type {@code context.Constraint_SLA_Isolation_level}
@@ -55355,7 +57060,7 @@ public final class ContextOuterClass {
       super(builder);
     }
     private Constraint_SLA_Isolation_level() {
-      isolationLevel_ = 0;
+      isolationLevel_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
@@ -55378,6 +57083,7 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -55390,8 +57096,25 @@ public final class ContextOuterClass {
               break;
             case 8: {
               int rawValue = input.readEnum();
-
-              isolationLevel_ = rawValue;
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                isolationLevel_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              isolationLevel_.add(rawValue);
+              break;
+            }
+            case 10: {
+              int length = input.readRawVarint32();
+              int oldLimit = input.pushLimit(length);
+              while(input.getBytesUntilLimit() > 0) {
+                int rawValue = input.readEnum();
+                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                  isolationLevel_ = new java.util.ArrayList<java.lang.Integer>();
+                  mutable_bitField0_ |= 0x00000001;
+                }
+                isolationLevel_.add(rawValue);
+              }
+              input.popLimit(oldLimit);
               break;
             }
             default: {
@@ -55409,6 +57132,9 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          isolationLevel_ = java.util.Collections.unmodifiableList(isolationLevel_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
@@ -55427,23 +57153,62 @@ public final class ContextOuterClass {
     }
 
     public static final int ISOLATION_LEVEL_FIELD_NUMBER = 1;
-    private int isolationLevel_;
+    private java.util.List<java.lang.Integer> isolationLevel_;
+    private static final com.google.protobuf.Internal.ListAdapter.Converter<
+        java.lang.Integer, context.ContextOuterClass.IsolationLevelEnum> isolationLevel_converter_ =
+            new com.google.protobuf.Internal.ListAdapter.Converter<
+                java.lang.Integer, context.ContextOuterClass.IsolationLevelEnum>() {
+              public context.ContextOuterClass.IsolationLevelEnum convert(java.lang.Integer from) {
+                @SuppressWarnings("deprecation")
+                context.ContextOuterClass.IsolationLevelEnum result = context.ContextOuterClass.IsolationLevelEnum.valueOf(from);
+                return result == null ? context.ContextOuterClass.IsolationLevelEnum.UNRECOGNIZED : result;
+              }
+            };
+    /**
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return A list containing the isolationLevel.
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.IsolationLevelEnum> getIsolationLevelList() {
+      return new com.google.protobuf.Internal.ListAdapter<
+          java.lang.Integer, context.ContextOuterClass.IsolationLevelEnum>(isolationLevel_, isolationLevel_converter_);
+    }
+    /**
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return The count of isolationLevel.
+     */
+    @java.lang.Override
+    public int getIsolationLevelCount() {
+      return isolationLevel_.size();
+    }
+    /**
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @param index The index of the element to return.
+     * @return The isolationLevel at the given index.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.IsolationLevelEnum getIsolationLevel(int index) {
+      return isolationLevel_converter_.convert(isolationLevel_.get(index));
+    }
     /**
-     * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
-     * @return The enum numeric value on the wire for isolationLevel.
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return A list containing the enum numeric values on the wire for isolationLevel.
      */
-    @java.lang.Override public int getIsolationLevelValue() {
+    @java.lang.Override
+    public java.util.List<java.lang.Integer>
+    getIsolationLevelValueList() {
       return isolationLevel_;
     }
     /**
-     * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
-     * @return The isolationLevel.
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of isolationLevel at the given index.
      */
-    @java.lang.Override public context.ContextOuterClass.IsolationLevelEnum getIsolationLevel() {
-      @SuppressWarnings("deprecation")
-      context.ContextOuterClass.IsolationLevelEnum result = context.ContextOuterClass.IsolationLevelEnum.valueOf(isolationLevel_);
-      return result == null ? context.ContextOuterClass.IsolationLevelEnum.UNRECOGNIZED : result;
+    @java.lang.Override
+    public int getIsolationLevelValue(int index) {
+      return isolationLevel_.get(index);
     }
+    private int isolationLevelMemoizedSerializedSize;
 
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
@@ -55459,8 +57224,13 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (isolationLevel_ != context.ContextOuterClass.IsolationLevelEnum.NO_ISOLATION.getNumber()) {
-        output.writeEnum(1, isolationLevel_);
+      getSerializedSize();
+      if (getIsolationLevelList().size() > 0) {
+        output.writeUInt32NoTag(10);
+        output.writeUInt32NoTag(isolationLevelMemoizedSerializedSize);
+      }
+      for (int i = 0; i < isolationLevel_.size(); i++) {
+        output.writeEnumNoTag(isolationLevel_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -55471,9 +57241,17 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (isolationLevel_ != context.ContextOuterClass.IsolationLevelEnum.NO_ISOLATION.getNumber()) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(1, isolationLevel_);
+      {
+        int dataSize = 0;
+        for (int i = 0; i < isolationLevel_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeEnumSizeNoTag(isolationLevel_.get(i));
+        }
+        size += dataSize;
+        if (!getIsolationLevelList().isEmpty()) {  size += 1;
+          size += com.google.protobuf.CodedOutputStream
+            .computeUInt32SizeNoTag(dataSize);
+        }isolationLevelMemoizedSerializedSize = dataSize;
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -55490,7 +57268,7 @@ public final class ContextOuterClass {
       }
       context.ContextOuterClass.Constraint_SLA_Isolation_level other = (context.ContextOuterClass.Constraint_SLA_Isolation_level) obj;
 
-      if (isolationLevel_ != other.isolationLevel_) return false;
+      if (!isolationLevel_.equals(other.isolationLevel_)) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -55502,8 +57280,10 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + ISOLATION_LEVEL_FIELD_NUMBER;
-      hash = (53 * hash) + isolationLevel_;
+      if (getIsolationLevelCount() > 0) {
+        hash = (37 * hash) + ISOLATION_LEVEL_FIELD_NUMBER;
+        hash = (53 * hash) + isolationLevel_.hashCode();
+      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -55637,8 +57417,8 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        isolationLevel_ = 0;
-
+        isolationLevel_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
         return this;
       }
 
@@ -55665,6 +57445,11 @@ public final class ContextOuterClass {
       @java.lang.Override
       public context.ContextOuterClass.Constraint_SLA_Isolation_level buildPartial() {
         context.ContextOuterClass.Constraint_SLA_Isolation_level result = new context.ContextOuterClass.Constraint_SLA_Isolation_level(this);
+        int from_bitField0_ = bitField0_;
+        if (((bitField0_ & 0x00000001) != 0)) {
+          isolationLevel_ = java.util.Collections.unmodifiableList(isolationLevel_);
+          bitField0_ = (bitField0_ & ~0x00000001);
+        }
         result.isolationLevel_ = isolationLevel_;
         onBuilt();
         return result;
@@ -55714,8 +57499,15 @@ public final class ContextOuterClass {
 
       public Builder mergeFrom(context.ContextOuterClass.Constraint_SLA_Isolation_level other) {
         if (other == context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance()) return this;
-        if (other.isolationLevel_ != 0) {
-          setIsolationLevelValue(other.getIsolationLevelValue());
+        if (!other.isolationLevel_.isEmpty()) {
+          if (isolationLevel_.isEmpty()) {
+            isolationLevel_ = other.isolationLevel_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureIsolationLevelIsMutable();
+            isolationLevel_.addAll(other.isolationLevel_);
+          }
+          onChanged();
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -55745,57 +57537,144 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int bitField0_;
 
-      private int isolationLevel_ = 0;
+      private java.util.List<java.lang.Integer> isolationLevel_ =
+        java.util.Collections.emptyList();
+      private void ensureIsolationLevelIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          isolationLevel_ = new java.util.ArrayList<java.lang.Integer>(isolationLevel_);
+          bitField0_ |= 0x00000001;
+        }
+      }
       /**
-       * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
-       * @return The enum numeric value on the wire for isolationLevel.
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @return A list containing the isolationLevel.
        */
-      @java.lang.Override public int getIsolationLevelValue() {
-        return isolationLevel_;
+      public java.util.List<context.ContextOuterClass.IsolationLevelEnum> getIsolationLevelList() {
+        return new com.google.protobuf.Internal.ListAdapter<
+            java.lang.Integer, context.ContextOuterClass.IsolationLevelEnum>(isolationLevel_, isolationLevel_converter_);
       }
       /**
-       * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
-       * @param value The enum numeric value on the wire for isolationLevel to set.
-       * @return This builder for chaining.
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @return The count of isolationLevel.
        */
-      public Builder setIsolationLevelValue(int value) {
-        
-        isolationLevel_ = value;
-        onChanged();
-        return this;
+      public int getIsolationLevelCount() {
+        return isolationLevel_.size();
       }
       /**
-       * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
-       * @return The isolationLevel.
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param index The index of the element to return.
+       * @return The isolationLevel at the given index.
        */
-      @java.lang.Override
-      public context.ContextOuterClass.IsolationLevelEnum getIsolationLevel() {
-        @SuppressWarnings("deprecation")
-        context.ContextOuterClass.IsolationLevelEnum result = context.ContextOuterClass.IsolationLevelEnum.valueOf(isolationLevel_);
-        return result == null ? context.ContextOuterClass.IsolationLevelEnum.UNRECOGNIZED : result;
+      public context.ContextOuterClass.IsolationLevelEnum getIsolationLevel(int index) {
+        return isolationLevel_converter_.convert(isolationLevel_.get(index));
       }
       /**
-       * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param index The index to set the value at.
        * @param value The isolationLevel to set.
        * @return This builder for chaining.
        */
-      public Builder setIsolationLevel(context.ContextOuterClass.IsolationLevelEnum value) {
+      public Builder setIsolationLevel(
+          int index, context.ContextOuterClass.IsolationLevelEnum value) {
         if (value == null) {
           throw new NullPointerException();
         }
-        
-        isolationLevel_ = value.getNumber();
+        ensureIsolationLevelIsMutable();
+        isolationLevel_.set(index, value.getNumber());
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param value The isolationLevel to add.
+       * @return This builder for chaining.
+       */
+      public Builder addIsolationLevel(context.ContextOuterClass.IsolationLevelEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureIsolationLevelIsMutable();
+        isolationLevel_.add(value.getNumber());
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param values The isolationLevel to add.
+       * @return This builder for chaining.
+       */
+      public Builder addAllIsolationLevel(
+          java.lang.Iterable<? extends context.ContextOuterClass.IsolationLevelEnum> values) {
+        ensureIsolationLevelIsMutable();
+        for (context.ContextOuterClass.IsolationLevelEnum value : values) {
+          isolationLevel_.add(value.getNumber());
+        }
         onChanged();
         return this;
       }
       /**
-       * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
        * @return This builder for chaining.
        */
       public Builder clearIsolationLevel() {
-        
-        isolationLevel_ = 0;
+        isolationLevel_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @return A list containing the enum numeric values on the wire for isolationLevel.
+       */
+      public java.util.List<java.lang.Integer>
+      getIsolationLevelValueList() {
+        return java.util.Collections.unmodifiableList(isolationLevel_);
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of isolationLevel at the given index.
+       */
+      public int getIsolationLevelValue(int index) {
+        return isolationLevel_.get(index);
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of isolationLevel at the given index.
+       * @return This builder for chaining.
+       */
+      public Builder setIsolationLevelValue(
+          int index, int value) {
+        ensureIsolationLevelIsMutable();
+        isolationLevel_.set(index, value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param value The enum numeric value on the wire for isolationLevel to add.
+       * @return This builder for chaining.
+       */
+      public Builder addIsolationLevelValue(int value) {
+        ensureIsolationLevelIsMutable();
+        isolationLevel_.add(value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param values The enum numeric values on the wire for isolationLevel to add.
+       * @return This builder for chaining.
+       */
+      public Builder addAllIsolationLevelValue(
+          java.lang.Iterable<java.lang.Integer> values) {
+        ensureIsolationLevelIsMutable();
+        for (int value : values) {
+          isolationLevel_.add(value);
+        }
         onChanged();
         return this;
       }
@@ -55902,62 +57781,77 @@ public final class ContextOuterClass {
     context.ContextOuterClass.Constraint_EndPointLocationOrBuilder getEndpointLocationOrBuilder();
 
     /**
-     * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+     * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+     * @return Whether the endpointPriority field is set.
+     */
+    boolean hasEndpointPriority();
+    /**
+     * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+     * @return The endpointPriority.
+     */
+    context.ContextOuterClass.Constraint_EndPointPriority getEndpointPriority();
+    /**
+     * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+     */
+    context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder getEndpointPriorityOrBuilder();
+
+    /**
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
      * @return Whether the slaCapacity field is set.
      */
     boolean hasSlaCapacity();
     /**
-     * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
      * @return The slaCapacity.
      */
     context.ContextOuterClass.Constraint_SLA_Capacity getSlaCapacity();
     /**
-     * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
      */
     context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder getSlaCapacityOrBuilder();
 
     /**
-     * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+     * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
      * @return Whether the slaLatency field is set.
      */
     boolean hasSlaLatency();
     /**
-     * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+     * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
      * @return The slaLatency.
      */
     context.ContextOuterClass.Constraint_SLA_Latency getSlaLatency();
     /**
-     * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+     * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
      */
     context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder getSlaLatencyOrBuilder();
 
     /**
-     * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+     * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
      * @return Whether the slaAvailability field is set.
      */
     boolean hasSlaAvailability();
     /**
-     * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+     * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
      * @return The slaAvailability.
      */
     context.ContextOuterClass.Constraint_SLA_Availability getSlaAvailability();
     /**
-     * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+     * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
      */
     context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder getSlaAvailabilityOrBuilder();
 
     /**
-     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
      * @return Whether the slaIsolation field is set.
      */
     boolean hasSlaIsolation();
     /**
-     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
      * @return The slaIsolation.
      */
     context.ContextOuterClass.Constraint_SLA_Isolation_level getSlaIsolation();
     /**
-     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
      */
     context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder getSlaIsolationOrBuilder();
 
@@ -56051,8 +57945,22 @@ public final class ContextOuterClass {
               break;
             }
             case 34: {
-              context.ContextOuterClass.Constraint_SLA_Capacity.Builder subBuilder = null;
+              context.ContextOuterClass.Constraint_EndPointPriority.Builder subBuilder = null;
               if (constraintCase_ == 4) {
+                subBuilder = ((context.ContextOuterClass.Constraint_EndPointPriority) constraint_).toBuilder();
+              }
+              constraint_ =
+                  input.readMessage(context.ContextOuterClass.Constraint_EndPointPriority.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom((context.ContextOuterClass.Constraint_EndPointPriority) constraint_);
+                constraint_ = subBuilder.buildPartial();
+              }
+              constraintCase_ = 4;
+              break;
+            }
+            case 42: {
+              context.ContextOuterClass.Constraint_SLA_Capacity.Builder subBuilder = null;
+              if (constraintCase_ == 5) {
                 subBuilder = ((context.ContextOuterClass.Constraint_SLA_Capacity) constraint_).toBuilder();
               }
               constraint_ =
@@ -56061,12 +57969,12 @@ public final class ContextOuterClass {
                 subBuilder.mergeFrom((context.ContextOuterClass.Constraint_SLA_Capacity) constraint_);
                 constraint_ = subBuilder.buildPartial();
               }
-              constraintCase_ = 4;
+              constraintCase_ = 5;
               break;
             }
-            case 42: {
+            case 50: {
               context.ContextOuterClass.Constraint_SLA_Latency.Builder subBuilder = null;
-              if (constraintCase_ == 5) {
+              if (constraintCase_ == 6) {
                 subBuilder = ((context.ContextOuterClass.Constraint_SLA_Latency) constraint_).toBuilder();
               }
               constraint_ =
@@ -56075,12 +57983,12 @@ public final class ContextOuterClass {
                 subBuilder.mergeFrom((context.ContextOuterClass.Constraint_SLA_Latency) constraint_);
                 constraint_ = subBuilder.buildPartial();
               }
-              constraintCase_ = 5;
+              constraintCase_ = 6;
               break;
             }
-            case 50: {
+            case 58: {
               context.ContextOuterClass.Constraint_SLA_Availability.Builder subBuilder = null;
-              if (constraintCase_ == 6) {
+              if (constraintCase_ == 7) {
                 subBuilder = ((context.ContextOuterClass.Constraint_SLA_Availability) constraint_).toBuilder();
               }
               constraint_ =
@@ -56089,12 +57997,12 @@ public final class ContextOuterClass {
                 subBuilder.mergeFrom((context.ContextOuterClass.Constraint_SLA_Availability) constraint_);
                 constraint_ = subBuilder.buildPartial();
               }
-              constraintCase_ = 6;
+              constraintCase_ = 7;
               break;
             }
-            case 58: {
+            case 66: {
               context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder subBuilder = null;
-              if (constraintCase_ == 7) {
+              if (constraintCase_ == 8) {
                 subBuilder = ((context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_).toBuilder();
               }
               constraint_ =
@@ -56103,7 +58011,7 @@ public final class ContextOuterClass {
                 subBuilder.mergeFrom((context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_);
                 constraint_ = subBuilder.buildPartial();
               }
-              constraintCase_ = 7;
+              constraintCase_ = 8;
               break;
             }
             default: {
@@ -56146,10 +58054,11 @@ public final class ContextOuterClass {
       CUSTOM(1),
       SCHEDULE(2),
       ENDPOINT_LOCATION(3),
-      SLA_CAPACITY(4),
-      SLA_LATENCY(5),
-      SLA_AVAILABILITY(6),
-      SLA_ISOLATION(7),
+      ENDPOINT_PRIORITY(4),
+      SLA_CAPACITY(5),
+      SLA_LATENCY(6),
+      SLA_AVAILABILITY(7),
+      SLA_ISOLATION(8),
       CONSTRAINT_NOT_SET(0);
       private final int value;
       private ConstraintCase(int value) {
@@ -56170,10 +58079,11 @@ public final class ContextOuterClass {
           case 1: return CUSTOM;
           case 2: return SCHEDULE;
           case 3: return ENDPOINT_LOCATION;
-          case 4: return SLA_CAPACITY;
-          case 5: return SLA_LATENCY;
-          case 6: return SLA_AVAILABILITY;
-          case 7: return SLA_ISOLATION;
+          case 4: return ENDPOINT_PRIORITY;
+          case 5: return SLA_CAPACITY;
+          case 6: return SLA_LATENCY;
+          case 7: return SLA_AVAILABILITY;
+          case 8: return SLA_ISOLATION;
           case 0: return CONSTRAINT_NOT_SET;
           default: return null;
         }
@@ -56282,125 +58192,156 @@ public final class ContextOuterClass {
       return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
     }
 
-    public static final int SLA_CAPACITY_FIELD_NUMBER = 4;
+    public static final int ENDPOINT_PRIORITY_FIELD_NUMBER = 4;
+    /**
+     * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+     * @return Whether the endpointPriority field is set.
+     */
+    @java.lang.Override
+    public boolean hasEndpointPriority() {
+      return constraintCase_ == 4;
+    }
+    /**
+     * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+     * @return The endpointPriority.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_EndPointPriority getEndpointPriority() {
+      if (constraintCase_ == 4) {
+         return (context.ContextOuterClass.Constraint_EndPointPriority) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+    }
+    /**
+     * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder getEndpointPriorityOrBuilder() {
+      if (constraintCase_ == 4) {
+         return (context.ContextOuterClass.Constraint_EndPointPriority) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+    }
+
+    public static final int SLA_CAPACITY_FIELD_NUMBER = 5;
     /**
-     * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
      * @return Whether the slaCapacity field is set.
      */
     @java.lang.Override
     public boolean hasSlaCapacity() {
-      return constraintCase_ == 4;
+      return constraintCase_ == 5;
     }
     /**
-     * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
      * @return The slaCapacity.
      */
     @java.lang.Override
     public context.ContextOuterClass.Constraint_SLA_Capacity getSlaCapacity() {
-      if (constraintCase_ == 4) {
+      if (constraintCase_ == 5) {
          return (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_;
       }
       return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
     }
     /**
-     * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder getSlaCapacityOrBuilder() {
-      if (constraintCase_ == 4) {
+      if (constraintCase_ == 5) {
          return (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_;
       }
       return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
     }
 
-    public static final int SLA_LATENCY_FIELD_NUMBER = 5;
+    public static final int SLA_LATENCY_FIELD_NUMBER = 6;
     /**
-     * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+     * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
      * @return Whether the slaLatency field is set.
      */
     @java.lang.Override
     public boolean hasSlaLatency() {
-      return constraintCase_ == 5;
+      return constraintCase_ == 6;
     }
     /**
-     * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+     * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
      * @return The slaLatency.
      */
     @java.lang.Override
     public context.ContextOuterClass.Constraint_SLA_Latency getSlaLatency() {
-      if (constraintCase_ == 5) {
+      if (constraintCase_ == 6) {
          return (context.ContextOuterClass.Constraint_SLA_Latency) constraint_;
       }
       return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
     }
     /**
-     * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+     * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder getSlaLatencyOrBuilder() {
-      if (constraintCase_ == 5) {
+      if (constraintCase_ == 6) {
          return (context.ContextOuterClass.Constraint_SLA_Latency) constraint_;
       }
       return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
     }
 
-    public static final int SLA_AVAILABILITY_FIELD_NUMBER = 6;
+    public static final int SLA_AVAILABILITY_FIELD_NUMBER = 7;
     /**
-     * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+     * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
      * @return Whether the slaAvailability field is set.
      */
     @java.lang.Override
     public boolean hasSlaAvailability() {
-      return constraintCase_ == 6;
+      return constraintCase_ == 7;
     }
     /**
-     * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+     * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
      * @return The slaAvailability.
      */
     @java.lang.Override
     public context.ContextOuterClass.Constraint_SLA_Availability getSlaAvailability() {
-      if (constraintCase_ == 6) {
+      if (constraintCase_ == 7) {
          return (context.ContextOuterClass.Constraint_SLA_Availability) constraint_;
       }
       return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
     }
     /**
-     * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+     * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder getSlaAvailabilityOrBuilder() {
-      if (constraintCase_ == 6) {
+      if (constraintCase_ == 7) {
          return (context.ContextOuterClass.Constraint_SLA_Availability) constraint_;
       }
       return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
     }
 
-    public static final int SLA_ISOLATION_FIELD_NUMBER = 7;
+    public static final int SLA_ISOLATION_FIELD_NUMBER = 8;
     /**
-     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
      * @return Whether the slaIsolation field is set.
      */
     @java.lang.Override
     public boolean hasSlaIsolation() {
-      return constraintCase_ == 7;
+      return constraintCase_ == 8;
     }
     /**
-     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
      * @return The slaIsolation.
      */
     @java.lang.Override
     public context.ContextOuterClass.Constraint_SLA_Isolation_level getSlaIsolation() {
-      if (constraintCase_ == 7) {
+      if (constraintCase_ == 8) {
          return (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_;
       }
       return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
     }
     /**
-     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder getSlaIsolationOrBuilder() {
-      if (constraintCase_ == 7) {
+      if (constraintCase_ == 8) {
          return (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_;
       }
       return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
@@ -56430,16 +58371,19 @@ public final class ContextOuterClass {
         output.writeMessage(3, (context.ContextOuterClass.Constraint_EndPointLocation) constraint_);
       }
       if (constraintCase_ == 4) {
-        output.writeMessage(4, (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_);
+        output.writeMessage(4, (context.ContextOuterClass.Constraint_EndPointPriority) constraint_);
       }
       if (constraintCase_ == 5) {
-        output.writeMessage(5, (context.ContextOuterClass.Constraint_SLA_Latency) constraint_);
+        output.writeMessage(5, (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_);
       }
       if (constraintCase_ == 6) {
-        output.writeMessage(6, (context.ContextOuterClass.Constraint_SLA_Availability) constraint_);
+        output.writeMessage(6, (context.ContextOuterClass.Constraint_SLA_Latency) constraint_);
       }
       if (constraintCase_ == 7) {
-        output.writeMessage(7, (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_);
+        output.writeMessage(7, (context.ContextOuterClass.Constraint_SLA_Availability) constraint_);
+      }
+      if (constraintCase_ == 8) {
+        output.writeMessage(8, (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_);
       }
       unknownFields.writeTo(output);
     }
@@ -56464,19 +58408,23 @@ public final class ContextOuterClass {
       }
       if (constraintCase_ == 4) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_);
+          .computeMessageSize(4, (context.ContextOuterClass.Constraint_EndPointPriority) constraint_);
       }
       if (constraintCase_ == 5) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, (context.ContextOuterClass.Constraint_SLA_Latency) constraint_);
+          .computeMessageSize(5, (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_);
       }
       if (constraintCase_ == 6) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, (context.ContextOuterClass.Constraint_SLA_Availability) constraint_);
+          .computeMessageSize(6, (context.ContextOuterClass.Constraint_SLA_Latency) constraint_);
       }
       if (constraintCase_ == 7) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(7, (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_);
+          .computeMessageSize(7, (context.ContextOuterClass.Constraint_SLA_Availability) constraint_);
+      }
+      if (constraintCase_ == 8) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(8, (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -56508,18 +58456,22 @@ public final class ContextOuterClass {
               .equals(other.getEndpointLocation())) return false;
           break;
         case 4:
+          if (!getEndpointPriority()
+              .equals(other.getEndpointPriority())) return false;
+          break;
+        case 5:
           if (!getSlaCapacity()
               .equals(other.getSlaCapacity())) return false;
           break;
-        case 5:
+        case 6:
           if (!getSlaLatency()
               .equals(other.getSlaLatency())) return false;
           break;
-        case 6:
+        case 7:
           if (!getSlaAvailability()
               .equals(other.getSlaAvailability())) return false;
           break;
-        case 7:
+        case 8:
           if (!getSlaIsolation()
               .equals(other.getSlaIsolation())) return false;
           break;
@@ -56551,18 +58503,22 @@ public final class ContextOuterClass {
           hash = (53 * hash) + getEndpointLocation().hashCode();
           break;
         case 4:
+          hash = (37 * hash) + ENDPOINT_PRIORITY_FIELD_NUMBER;
+          hash = (53 * hash) + getEndpointPriority().hashCode();
+          break;
+        case 5:
           hash = (37 * hash) + SLA_CAPACITY_FIELD_NUMBER;
           hash = (53 * hash) + getSlaCapacity().hashCode();
           break;
-        case 5:
+        case 6:
           hash = (37 * hash) + SLA_LATENCY_FIELD_NUMBER;
           hash = (53 * hash) + getSlaLatency().hashCode();
           break;
-        case 6:
+        case 7:
           hash = (37 * hash) + SLA_AVAILABILITY_FIELD_NUMBER;
           hash = (53 * hash) + getSlaAvailability().hashCode();
           break;
-        case 7:
+        case 8:
           hash = (37 * hash) + SLA_ISOLATION_FIELD_NUMBER;
           hash = (53 * hash) + getSlaIsolation().hashCode();
           break;
@@ -56752,27 +58708,34 @@ public final class ContextOuterClass {
           }
         }
         if (constraintCase_ == 4) {
+          if (endpointPriorityBuilder_ == null) {
+            result.constraint_ = constraint_;
+          } else {
+            result.constraint_ = endpointPriorityBuilder_.build();
+          }
+        }
+        if (constraintCase_ == 5) {
           if (slaCapacityBuilder_ == null) {
             result.constraint_ = constraint_;
           } else {
             result.constraint_ = slaCapacityBuilder_.build();
           }
         }
-        if (constraintCase_ == 5) {
+        if (constraintCase_ == 6) {
           if (slaLatencyBuilder_ == null) {
             result.constraint_ = constraint_;
           } else {
             result.constraint_ = slaLatencyBuilder_.build();
           }
         }
-        if (constraintCase_ == 6) {
+        if (constraintCase_ == 7) {
           if (slaAvailabilityBuilder_ == null) {
             result.constraint_ = constraint_;
           } else {
             result.constraint_ = slaAvailabilityBuilder_.build();
           }
         }
-        if (constraintCase_ == 7) {
+        if (constraintCase_ == 8) {
           if (slaIsolationBuilder_ == null) {
             result.constraint_ = constraint_;
           } else {
@@ -56841,6 +58804,10 @@ public final class ContextOuterClass {
             mergeEndpointLocation(other.getEndpointLocation());
             break;
           }
+          case ENDPOINT_PRIORITY: {
+            mergeEndpointPriority(other.getEndpointPriority());
+            break;
+          }
           case SLA_CAPACITY: {
             mergeSlaCapacity(other.getSlaCapacity());
             break;
@@ -57328,36 +59295,177 @@ public final class ContextOuterClass {
         return endpointLocationBuilder_;
       }
 
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_EndPointPriority, context.ContextOuterClass.Constraint_EndPointPriority.Builder, context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder> endpointPriorityBuilder_;
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       * @return Whether the endpointPriority field is set.
+       */
+      @java.lang.Override
+      public boolean hasEndpointPriority() {
+        return constraintCase_ == 4;
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       * @return The endpointPriority.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_EndPointPriority getEndpointPriority() {
+        if (endpointPriorityBuilder_ == null) {
+          if (constraintCase_ == 4) {
+            return (context.ContextOuterClass.Constraint_EndPointPriority) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+        } else {
+          if (constraintCase_ == 4) {
+            return endpointPriorityBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       */
+      public Builder setEndpointPriority(context.ContextOuterClass.Constraint_EndPointPriority value) {
+        if (endpointPriorityBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          constraint_ = value;
+          onChanged();
+        } else {
+          endpointPriorityBuilder_.setMessage(value);
+        }
+        constraintCase_ = 4;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       */
+      public Builder setEndpointPriority(
+          context.ContextOuterClass.Constraint_EndPointPriority.Builder builderForValue) {
+        if (endpointPriorityBuilder_ == null) {
+          constraint_ = builderForValue.build();
+          onChanged();
+        } else {
+          endpointPriorityBuilder_.setMessage(builderForValue.build());
+        }
+        constraintCase_ = 4;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       */
+      public Builder mergeEndpointPriority(context.ContextOuterClass.Constraint_EndPointPriority value) {
+        if (endpointPriorityBuilder_ == null) {
+          if (constraintCase_ == 4 &&
+              constraint_ != context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance()) {
+            constraint_ = context.ContextOuterClass.Constraint_EndPointPriority.newBuilder((context.ContextOuterClass.Constraint_EndPointPriority) constraint_)
+                .mergeFrom(value).buildPartial();
+          } else {
+            constraint_ = value;
+          }
+          onChanged();
+        } else {
+          if (constraintCase_ == 4) {
+            endpointPriorityBuilder_.mergeFrom(value);
+          }
+          endpointPriorityBuilder_.setMessage(value);
+        }
+        constraintCase_ = 4;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       */
+      public Builder clearEndpointPriority() {
+        if (endpointPriorityBuilder_ == null) {
+          if (constraintCase_ == 4) {
+            constraintCase_ = 0;
+            constraint_ = null;
+            onChanged();
+          }
+        } else {
+          if (constraintCase_ == 4) {
+            constraintCase_ = 0;
+            constraint_ = null;
+          }
+          endpointPriorityBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       */
+      public context.ContextOuterClass.Constraint_EndPointPriority.Builder getEndpointPriorityBuilder() {
+        return getEndpointPriorityFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder getEndpointPriorityOrBuilder() {
+        if ((constraintCase_ == 4) && (endpointPriorityBuilder_ != null)) {
+          return endpointPriorityBuilder_.getMessageOrBuilder();
+        } else {
+          if (constraintCase_ == 4) {
+            return (context.ContextOuterClass.Constraint_EndPointPriority) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_EndPointPriority, context.ContextOuterClass.Constraint_EndPointPriority.Builder, context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder> 
+          getEndpointPriorityFieldBuilder() {
+        if (endpointPriorityBuilder_ == null) {
+          if (!(constraintCase_ == 4)) {
+            constraint_ = context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+          }
+          endpointPriorityBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Constraint_EndPointPriority, context.ContextOuterClass.Constraint_EndPointPriority.Builder, context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder>(
+                  (context.ContextOuterClass.Constraint_EndPointPriority) constraint_,
+                  getParentForChildren(),
+                  isClean());
+          constraint_ = null;
+        }
+        constraintCase_ = 4;
+        onChanged();;
+        return endpointPriorityBuilder_;
+      }
+
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Constraint_SLA_Capacity, context.ContextOuterClass.Constraint_SLA_Capacity.Builder, context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder> slaCapacityBuilder_;
       /**
-       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
        * @return Whether the slaCapacity field is set.
        */
       @java.lang.Override
       public boolean hasSlaCapacity() {
-        return constraintCase_ == 4;
+        return constraintCase_ == 5;
       }
       /**
-       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
        * @return The slaCapacity.
        */
       @java.lang.Override
       public context.ContextOuterClass.Constraint_SLA_Capacity getSlaCapacity() {
         if (slaCapacityBuilder_ == null) {
-          if (constraintCase_ == 4) {
+          if (constraintCase_ == 5) {
             return (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_;
           }
           return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
         } else {
-          if (constraintCase_ == 4) {
+          if (constraintCase_ == 5) {
             return slaCapacityBuilder_.getMessage();
           }
           return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
        */
       public Builder setSlaCapacity(context.ContextOuterClass.Constraint_SLA_Capacity value) {
         if (slaCapacityBuilder_ == null) {
@@ -57369,11 +59477,11 @@ public final class ContextOuterClass {
         } else {
           slaCapacityBuilder_.setMessage(value);
         }
-        constraintCase_ = 4;
+        constraintCase_ = 5;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
        */
       public Builder setSlaCapacity(
           context.ContextOuterClass.Constraint_SLA_Capacity.Builder builderForValue) {
@@ -57383,15 +59491,15 @@ public final class ContextOuterClass {
         } else {
           slaCapacityBuilder_.setMessage(builderForValue.build());
         }
-        constraintCase_ = 4;
+        constraintCase_ = 5;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
        */
       public Builder mergeSlaCapacity(context.ContextOuterClass.Constraint_SLA_Capacity value) {
         if (slaCapacityBuilder_ == null) {
-          if (constraintCase_ == 4 &&
+          if (constraintCase_ == 5 &&
               constraint_ != context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance()) {
             constraint_ = context.ContextOuterClass.Constraint_SLA_Capacity.newBuilder((context.ContextOuterClass.Constraint_SLA_Capacity) constraint_)
                 .mergeFrom(value).buildPartial();
@@ -57400,26 +59508,26 @@ public final class ContextOuterClass {
           }
           onChanged();
         } else {
-          if (constraintCase_ == 4) {
+          if (constraintCase_ == 5) {
             slaCapacityBuilder_.mergeFrom(value);
           }
           slaCapacityBuilder_.setMessage(value);
         }
-        constraintCase_ = 4;
+        constraintCase_ = 5;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
        */
       public Builder clearSlaCapacity() {
         if (slaCapacityBuilder_ == null) {
-          if (constraintCase_ == 4) {
+          if (constraintCase_ == 5) {
             constraintCase_ = 0;
             constraint_ = null;
             onChanged();
           }
         } else {
-          if (constraintCase_ == 4) {
+          if (constraintCase_ == 5) {
             constraintCase_ = 0;
             constraint_ = null;
           }
@@ -57428,33 +59536,33 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
        */
       public context.ContextOuterClass.Constraint_SLA_Capacity.Builder getSlaCapacityBuilder() {
         return getSlaCapacityFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
        */
       @java.lang.Override
       public context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder getSlaCapacityOrBuilder() {
-        if ((constraintCase_ == 4) && (slaCapacityBuilder_ != null)) {
+        if ((constraintCase_ == 5) && (slaCapacityBuilder_ != null)) {
           return slaCapacityBuilder_.getMessageOrBuilder();
         } else {
-          if (constraintCase_ == 4) {
+          if (constraintCase_ == 5) {
             return (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_;
           }
           return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Constraint_SLA_Capacity, context.ContextOuterClass.Constraint_SLA_Capacity.Builder, context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder> 
           getSlaCapacityFieldBuilder() {
         if (slaCapacityBuilder_ == null) {
-          if (!(constraintCase_ == 4)) {
+          if (!(constraintCase_ == 5)) {
             constraint_ = context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
           }
           slaCapacityBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
@@ -57464,7 +59572,7 @@ public final class ContextOuterClass {
                   isClean());
           constraint_ = null;
         }
-        constraintCase_ = 4;
+        constraintCase_ = 5;
         onChanged();;
         return slaCapacityBuilder_;
       }
@@ -57472,33 +59580,33 @@ public final class ContextOuterClass {
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Constraint_SLA_Latency, context.ContextOuterClass.Constraint_SLA_Latency.Builder, context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder> slaLatencyBuilder_;
       /**
-       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
        * @return Whether the slaLatency field is set.
        */
       @java.lang.Override
       public boolean hasSlaLatency() {
-        return constraintCase_ == 5;
+        return constraintCase_ == 6;
       }
       /**
-       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
        * @return The slaLatency.
        */
       @java.lang.Override
       public context.ContextOuterClass.Constraint_SLA_Latency getSlaLatency() {
         if (slaLatencyBuilder_ == null) {
-          if (constraintCase_ == 5) {
+          if (constraintCase_ == 6) {
             return (context.ContextOuterClass.Constraint_SLA_Latency) constraint_;
           }
           return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
         } else {
-          if (constraintCase_ == 5) {
+          if (constraintCase_ == 6) {
             return slaLatencyBuilder_.getMessage();
           }
           return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
        */
       public Builder setSlaLatency(context.ContextOuterClass.Constraint_SLA_Latency value) {
         if (slaLatencyBuilder_ == null) {
@@ -57510,11 +59618,11 @@ public final class ContextOuterClass {
         } else {
           slaLatencyBuilder_.setMessage(value);
         }
-        constraintCase_ = 5;
+        constraintCase_ = 6;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
        */
       public Builder setSlaLatency(
           context.ContextOuterClass.Constraint_SLA_Latency.Builder builderForValue) {
@@ -57524,15 +59632,15 @@ public final class ContextOuterClass {
         } else {
           slaLatencyBuilder_.setMessage(builderForValue.build());
         }
-        constraintCase_ = 5;
+        constraintCase_ = 6;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
        */
       public Builder mergeSlaLatency(context.ContextOuterClass.Constraint_SLA_Latency value) {
         if (slaLatencyBuilder_ == null) {
-          if (constraintCase_ == 5 &&
+          if (constraintCase_ == 6 &&
               constraint_ != context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance()) {
             constraint_ = context.ContextOuterClass.Constraint_SLA_Latency.newBuilder((context.ContextOuterClass.Constraint_SLA_Latency) constraint_)
                 .mergeFrom(value).buildPartial();
@@ -57541,26 +59649,26 @@ public final class ContextOuterClass {
           }
           onChanged();
         } else {
-          if (constraintCase_ == 5) {
+          if (constraintCase_ == 6) {
             slaLatencyBuilder_.mergeFrom(value);
           }
           slaLatencyBuilder_.setMessage(value);
         }
-        constraintCase_ = 5;
+        constraintCase_ = 6;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
        */
       public Builder clearSlaLatency() {
         if (slaLatencyBuilder_ == null) {
-          if (constraintCase_ == 5) {
+          if (constraintCase_ == 6) {
             constraintCase_ = 0;
             constraint_ = null;
             onChanged();
           }
         } else {
-          if (constraintCase_ == 5) {
+          if (constraintCase_ == 6) {
             constraintCase_ = 0;
             constraint_ = null;
           }
@@ -57569,33 +59677,33 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
        */
       public context.ContextOuterClass.Constraint_SLA_Latency.Builder getSlaLatencyBuilder() {
         return getSlaLatencyFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
        */
       @java.lang.Override
       public context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder getSlaLatencyOrBuilder() {
-        if ((constraintCase_ == 5) && (slaLatencyBuilder_ != null)) {
+        if ((constraintCase_ == 6) && (slaLatencyBuilder_ != null)) {
           return slaLatencyBuilder_.getMessageOrBuilder();
         } else {
-          if (constraintCase_ == 5) {
+          if (constraintCase_ == 6) {
             return (context.ContextOuterClass.Constraint_SLA_Latency) constraint_;
           }
           return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Constraint_SLA_Latency, context.ContextOuterClass.Constraint_SLA_Latency.Builder, context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder> 
           getSlaLatencyFieldBuilder() {
         if (slaLatencyBuilder_ == null) {
-          if (!(constraintCase_ == 5)) {
+          if (!(constraintCase_ == 6)) {
             constraint_ = context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
           }
           slaLatencyBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
@@ -57605,7 +59713,7 @@ public final class ContextOuterClass {
                   isClean());
           constraint_ = null;
         }
-        constraintCase_ = 5;
+        constraintCase_ = 6;
         onChanged();;
         return slaLatencyBuilder_;
       }
@@ -57613,33 +59721,33 @@ public final class ContextOuterClass {
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Constraint_SLA_Availability, context.ContextOuterClass.Constraint_SLA_Availability.Builder, context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder> slaAvailabilityBuilder_;
       /**
-       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        * @return Whether the slaAvailability field is set.
        */
       @java.lang.Override
       public boolean hasSlaAvailability() {
-        return constraintCase_ == 6;
+        return constraintCase_ == 7;
       }
       /**
-       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        * @return The slaAvailability.
        */
       @java.lang.Override
       public context.ContextOuterClass.Constraint_SLA_Availability getSlaAvailability() {
         if (slaAvailabilityBuilder_ == null) {
-          if (constraintCase_ == 6) {
+          if (constraintCase_ == 7) {
             return (context.ContextOuterClass.Constraint_SLA_Availability) constraint_;
           }
           return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
         } else {
-          if (constraintCase_ == 6) {
+          if (constraintCase_ == 7) {
             return slaAvailabilityBuilder_.getMessage();
           }
           return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        */
       public Builder setSlaAvailability(context.ContextOuterClass.Constraint_SLA_Availability value) {
         if (slaAvailabilityBuilder_ == null) {
@@ -57651,11 +59759,11 @@ public final class ContextOuterClass {
         } else {
           slaAvailabilityBuilder_.setMessage(value);
         }
-        constraintCase_ = 6;
+        constraintCase_ = 7;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        */
       public Builder setSlaAvailability(
           context.ContextOuterClass.Constraint_SLA_Availability.Builder builderForValue) {
@@ -57665,15 +59773,15 @@ public final class ContextOuterClass {
         } else {
           slaAvailabilityBuilder_.setMessage(builderForValue.build());
         }
-        constraintCase_ = 6;
+        constraintCase_ = 7;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        */
       public Builder mergeSlaAvailability(context.ContextOuterClass.Constraint_SLA_Availability value) {
         if (slaAvailabilityBuilder_ == null) {
-          if (constraintCase_ == 6 &&
+          if (constraintCase_ == 7 &&
               constraint_ != context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance()) {
             constraint_ = context.ContextOuterClass.Constraint_SLA_Availability.newBuilder((context.ContextOuterClass.Constraint_SLA_Availability) constraint_)
                 .mergeFrom(value).buildPartial();
@@ -57682,26 +59790,26 @@ public final class ContextOuterClass {
           }
           onChanged();
         } else {
-          if (constraintCase_ == 6) {
+          if (constraintCase_ == 7) {
             slaAvailabilityBuilder_.mergeFrom(value);
           }
           slaAvailabilityBuilder_.setMessage(value);
         }
-        constraintCase_ = 6;
+        constraintCase_ = 7;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        */
       public Builder clearSlaAvailability() {
         if (slaAvailabilityBuilder_ == null) {
-          if (constraintCase_ == 6) {
+          if (constraintCase_ == 7) {
             constraintCase_ = 0;
             constraint_ = null;
             onChanged();
           }
         } else {
-          if (constraintCase_ == 6) {
+          if (constraintCase_ == 7) {
             constraintCase_ = 0;
             constraint_ = null;
           }
@@ -57710,33 +59818,33 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        */
       public context.ContextOuterClass.Constraint_SLA_Availability.Builder getSlaAvailabilityBuilder() {
         return getSlaAvailabilityFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        */
       @java.lang.Override
       public context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder getSlaAvailabilityOrBuilder() {
-        if ((constraintCase_ == 6) && (slaAvailabilityBuilder_ != null)) {
+        if ((constraintCase_ == 7) && (slaAvailabilityBuilder_ != null)) {
           return slaAvailabilityBuilder_.getMessageOrBuilder();
         } else {
-          if (constraintCase_ == 6) {
+          if (constraintCase_ == 7) {
             return (context.ContextOuterClass.Constraint_SLA_Availability) constraint_;
           }
           return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Constraint_SLA_Availability, context.ContextOuterClass.Constraint_SLA_Availability.Builder, context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder> 
           getSlaAvailabilityFieldBuilder() {
         if (slaAvailabilityBuilder_ == null) {
-          if (!(constraintCase_ == 6)) {
+          if (!(constraintCase_ == 7)) {
             constraint_ = context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
           }
           slaAvailabilityBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
@@ -57746,7 +59854,7 @@ public final class ContextOuterClass {
                   isClean());
           constraint_ = null;
         }
-        constraintCase_ = 6;
+        constraintCase_ = 7;
         onChanged();;
         return slaAvailabilityBuilder_;
       }
@@ -57754,33 +59862,33 @@ public final class ContextOuterClass {
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Constraint_SLA_Isolation_level, context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder, context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder> slaIsolationBuilder_;
       /**
-       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        * @return Whether the slaIsolation field is set.
        */
       @java.lang.Override
       public boolean hasSlaIsolation() {
-        return constraintCase_ == 7;
+        return constraintCase_ == 8;
       }
       /**
-       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        * @return The slaIsolation.
        */
       @java.lang.Override
       public context.ContextOuterClass.Constraint_SLA_Isolation_level getSlaIsolation() {
         if (slaIsolationBuilder_ == null) {
-          if (constraintCase_ == 7) {
+          if (constraintCase_ == 8) {
             return (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_;
           }
           return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
         } else {
-          if (constraintCase_ == 7) {
+          if (constraintCase_ == 8) {
             return slaIsolationBuilder_.getMessage();
           }
           return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        */
       public Builder setSlaIsolation(context.ContextOuterClass.Constraint_SLA_Isolation_level value) {
         if (slaIsolationBuilder_ == null) {
@@ -57792,11 +59900,11 @@ public final class ContextOuterClass {
         } else {
           slaIsolationBuilder_.setMessage(value);
         }
-        constraintCase_ = 7;
+        constraintCase_ = 8;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        */
       public Builder setSlaIsolation(
           context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder builderForValue) {
@@ -57806,15 +59914,15 @@ public final class ContextOuterClass {
         } else {
           slaIsolationBuilder_.setMessage(builderForValue.build());
         }
-        constraintCase_ = 7;
+        constraintCase_ = 8;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        */
       public Builder mergeSlaIsolation(context.ContextOuterClass.Constraint_SLA_Isolation_level value) {
         if (slaIsolationBuilder_ == null) {
-          if (constraintCase_ == 7 &&
+          if (constraintCase_ == 8 &&
               constraint_ != context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance()) {
             constraint_ = context.ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder((context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_)
                 .mergeFrom(value).buildPartial();
@@ -57823,26 +59931,26 @@ public final class ContextOuterClass {
           }
           onChanged();
         } else {
-          if (constraintCase_ == 7) {
+          if (constraintCase_ == 8) {
             slaIsolationBuilder_.mergeFrom(value);
           }
           slaIsolationBuilder_.setMessage(value);
         }
-        constraintCase_ = 7;
+        constraintCase_ = 8;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        */
       public Builder clearSlaIsolation() {
         if (slaIsolationBuilder_ == null) {
-          if (constraintCase_ == 7) {
+          if (constraintCase_ == 8) {
             constraintCase_ = 0;
             constraint_ = null;
             onChanged();
           }
         } else {
-          if (constraintCase_ == 7) {
+          if (constraintCase_ == 8) {
             constraintCase_ = 0;
             constraint_ = null;
           }
@@ -57851,33 +59959,33 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        */
       public context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder getSlaIsolationBuilder() {
         return getSlaIsolationFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        */
       @java.lang.Override
       public context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder getSlaIsolationOrBuilder() {
-        if ((constraintCase_ == 7) && (slaIsolationBuilder_ != null)) {
+        if ((constraintCase_ == 8) && (slaIsolationBuilder_ != null)) {
           return slaIsolationBuilder_.getMessageOrBuilder();
         } else {
-          if (constraintCase_ == 7) {
+          if (constraintCase_ == 8) {
             return (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_;
           }
           return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Constraint_SLA_Isolation_level, context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder, context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder> 
           getSlaIsolationFieldBuilder() {
         if (slaIsolationBuilder_ == null) {
-          if (!(constraintCase_ == 7)) {
+          if (!(constraintCase_ == 8)) {
             constraint_ = context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
           }
           slaIsolationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
@@ -57887,7 +59995,7 @@ public final class ContextOuterClass {
                   isClean());
           constraint_ = null;
         }
-        constraintCase_ = 7;
+        constraintCase_ = 8;
         onChanged();;
         return slaIsolationBuilder_;
       }
@@ -59665,6 +61773,11 @@ public final class ContextOuterClass {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_context_SliceStatus_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_SliceConfig_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_SliceConfig_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_context_SliceIdList_descriptor;
   private static final 
@@ -59780,6 +61893,11 @@ public final class ContextOuterClass {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_context_Constraint_EndPointLocation_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Constraint_EndPointPriority_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Constraint_EndPointPriority_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_context_Constraint_SLA_Latency_descriptor;
   private static final 
@@ -59893,194 +62011,200 @@ public final class ContextOuterClass {
       "nt\030\001 \001(\0132\016.context.Event\022&\n\nservice_id\030\002" +
       " \001(\0132\022.context.ServiceId\"T\n\007SliceId\022&\n\nc" +
       "ontext_id\030\001 \001(\0132\022.context.ContextId\022!\n\ns" +
-      "lice_uuid\030\002 \001(\0132\r.context.Uuid\"\346\002\n\005Slice" +
+      "lice_uuid\030\002 \001(\0132\r.context.Uuid\"\222\003\n\005Slice" +
       "\022\"\n\010slice_id\030\001 \001(\0132\020.context.SliceId\022/\n\022" +
       "slice_endpoint_ids\030\002 \003(\0132\023.context.EndPo" +
       "intId\022.\n\021slice_constraints\030\003 \003(\0132\023.conte" +
       "xt.Constraint\022-\n\021slice_service_ids\030\004 \003(\013" +
       "2\022.context.ServiceId\022,\n\022slice_subslice_i" +
       "ds\030\005 \003(\0132\020.context.SliceId\022*\n\014slice_stat" +
-      "us\030\006 \001(\0132\024.context.SliceStatus\022(\n\013slice_" +
-      "owner\030\007 \001(\0132\023.context.SliceOwner\022%\n\ttime" +
-      "stamp\030\010 \001(\0132\022.context.Timestamp\"E\n\nSlice" +
-      "Owner\022!\n\nowner_uuid\030\001 \001(\0132\r.context.Uuid" +
-      "\022\024\n\014owner_string\030\002 \001(\t\"=\n\013SliceStatus\022.\n" +
-      "\014slice_status\030\001 \001(\0162\030.context.SliceStatu" +
-      "sEnum\"2\n\013SliceIdList\022#\n\tslice_ids\030\001 \003(\0132" +
-      "\020.context.SliceId\"+\n\tSliceList\022\036\n\006slices" +
-      "\030\001 \003(\0132\016.context.Slice\"O\n\nSliceEvent\022\035\n\005" +
-      "event\030\001 \001(\0132\016.context.Event\022\"\n\010slice_id\030" +
-      "\002 \001(\0132\020.context.SliceId\"6\n\014ConnectionId\022" +
-      "&\n\017connection_uuid\030\001 \001(\0132\r.context.Uuid\"" +
-      "2\n\025ConnectionSettings_L0\022\031\n\021lsp_symbolic" +
-      "_name\030\001 \001(\t\"\236\001\n\025ConnectionSettings_L2\022\027\n" +
-      "\017src_mac_address\030\001 \001(\t\022\027\n\017dst_mac_addres" +
-      "s\030\002 \001(\t\022\022\n\nether_type\030\003 \001(\r\022\017\n\007vlan_id\030\004" +
-      " \001(\r\022\022\n\nmpls_label\030\005 \001(\r\022\032\n\022mpls_traffic" +
-      "_class\030\006 \001(\r\"t\n\025ConnectionSettings_L3\022\026\n" +
-      "\016src_ip_address\030\001 \001(\t\022\026\n\016dst_ip_address\030" +
-      "\002 \001(\t\022\014\n\004dscp\030\003 \001(\r\022\020\n\010protocol\030\004 \001(\r\022\013\n" +
-      "\003ttl\030\005 \001(\r\"[\n\025ConnectionSettings_L4\022\020\n\010s" +
-      "rc_port\030\001 \001(\r\022\020\n\010dst_port\030\002 \001(\r\022\021\n\ttcp_f" +
-      "lags\030\003 \001(\r\022\013\n\003ttl\030\004 \001(\r\"\304\001\n\022ConnectionSe" +
-      "ttings\022*\n\002l0\030\001 \001(\0132\036.context.ConnectionS" +
-      "ettings_L0\022*\n\002l2\030\002 \001(\0132\036.context.Connect" +
-      "ionSettings_L2\022*\n\002l3\030\003 \001(\0132\036.context.Con" +
-      "nectionSettings_L3\022*\n\002l4\030\004 \001(\0132\036.context" +
-      ".ConnectionSettings_L4\"\363\001\n\nConnection\022,\n" +
-      "\rconnection_id\030\001 \001(\0132\025.context.Connectio" +
-      "nId\022&\n\nservice_id\030\002 \001(\0132\022.context.Servic" +
-      "eId\0223\n\026path_hops_endpoint_ids\030\003 \003(\0132\023.co" +
-      "ntext.EndPointId\022+\n\017sub_service_ids\030\004 \003(" +
-      "\0132\022.context.ServiceId\022-\n\010settings\030\005 \001(\0132" +
-      "\033.context.ConnectionSettings\"A\n\020Connecti" +
-      "onIdList\022-\n\016connection_ids\030\001 \003(\0132\025.conte" +
-      "xt.ConnectionId\":\n\016ConnectionList\022(\n\013con" +
-      "nections\030\001 \003(\0132\023.context.Connection\"^\n\017C" +
-      "onnectionEvent\022\035\n\005event\030\001 \001(\0132\016.context." +
-      "Event\022,\n\rconnection_id\030\002 \001(\0132\025.context.C" +
-      "onnectionId\"\202\001\n\nEndPointId\022(\n\013topology_i" +
-      "d\030\001 \001(\0132\023.context.TopologyId\022$\n\tdevice_i" +
-      "d\030\002 \001(\0132\021.context.DeviceId\022$\n\rendpoint_u" +
-      "uid\030\003 \001(\0132\r.context.Uuid\"\264\001\n\010EndPoint\022(\n" +
-      "\013endpoint_id\030\001 \001(\0132\023.context.EndPointId\022" +
-      "\025\n\rendpoint_type\030\002 \001(\t\0229\n\020kpi_sample_typ" +
-      "es\030\003 \003(\0162\037.kpi_sample_types.KpiSampleTyp" +
-      "e\022,\n\021endpoint_location\030\004 \001(\0132\021.context.L" +
-      "ocation\"A\n\021ConfigRule_Custom\022\024\n\014resource" +
-      "_key\030\001 \001(\t\022\026\n\016resource_value\030\002 \001(\t\"]\n\016Co" +
-      "nfigRule_ACL\022(\n\013endpoint_id\030\001 \001(\0132\023.cont" +
-      "ext.EndPointId\022!\n\010rule_set\030\002 \001(\0132\017.acl.A" +
-      "clRuleSet\"\234\001\n\nConfigRule\022)\n\006action\030\001 \001(\016" +
-      "2\031.context.ConfigActionEnum\022,\n\006custom\030\002 " +
-      "\001(\0132\032.context.ConfigRule_CustomH\000\022&\n\003acl" +
-      "\030\003 \001(\0132\027.context.ConfigRule_ACLH\000B\r\n\013con" +
-      "fig_rule\"F\n\021Constraint_Custom\022\027\n\017constra" +
-      "int_type\030\001 \001(\t\022\030\n\020constraint_value\030\002 \001(\t" +
-      "\"E\n\023Constraint_Schedule\022\027\n\017start_timesta" +
-      "mp\030\001 \001(\002\022\025\n\rduration_days\030\002 \001(\002\"3\n\014GPS_P" +
-      "osition\022\020\n\010latitude\030\001 \001(\002\022\021\n\tlongitude\030\002" +
-      " \001(\002\"W\n\010Location\022\020\n\006region\030\001 \001(\tH\000\022-\n\014gp" +
-      "s_position\030\002 \001(\0132\025.context.GPS_PositionH" +
-      "\000B\n\n\010location\"l\n\033Constraint_EndPointLoca" +
-      "tion\022(\n\013endpoint_id\030\001 \001(\0132\023.context.EndP" +
-      "ointId\022#\n\010location\030\002 \001(\0132\021.context.Locat" +
-      "ion\"0\n\026Constraint_SLA_Latency\022\026\n\016e2e_lat" +
-      "ency_ms\030\001 \001(\002\"0\n\027Constraint_SLA_Capacity" +
-      "\022\025\n\rcapacity_gbps\030\001 \001(\002\"M\n\033Constraint_SL" +
-      "A_Availability\022\032\n\022num_disjoint_paths\030\001 \001" +
-      "(\r\022\022\n\nall_active\030\002 \001(\010\"V\n\036Constraint_SLA" +
-      "_Isolation_level\0224\n\017isolation_level\030\001 \001(" +
-      "\0162\033.context.IsolationLevelEnum\"\263\003\n\nConst" +
-      "raint\022,\n\006custom\030\001 \001(\0132\032.context.Constrai" +
-      "nt_CustomH\000\0220\n\010schedule\030\002 \001(\0132\034.context." +
-      "Constraint_ScheduleH\000\022A\n\021endpoint_locati" +
-      "on\030\003 \001(\0132$.context.Constraint_EndPointLo" +
-      "cationH\000\0228\n\014sla_capacity\030\004 \001(\0132 .context" +
-      ".Constraint_SLA_CapacityH\000\0226\n\013sla_latenc" +
-      "y\030\005 \001(\0132\037.context.Constraint_SLA_Latency" +
-      "H\000\022@\n\020sla_availability\030\006 \001(\0132$.context.C" +
-      "onstraint_SLA_AvailabilityH\000\022@\n\rsla_isol" +
-      "ation\030\007 \001(\0132\'.context.Constraint_SLA_Iso" +
-      "lation_levelH\000B\014\n\nconstraint\"^\n\022TeraFlow" +
-      "Controller\022&\n\ncontext_id\030\001 \001(\0132\022.context" +
-      ".ContextId\022\022\n\nip_address\030\002 \001(\t\022\014\n\004port\030\003" +
-      " \001(\r\"U\n\024AuthenticationResult\022&\n\ncontext_" +
-      "id\030\001 \001(\0132\022.context.ContextId\022\025\n\rauthenti" +
-      "cated\030\002 \001(\010*j\n\rEventTypeEnum\022\027\n\023EVENTTYP" +
-      "E_UNDEFINED\020\000\022\024\n\020EVENTTYPE_CREATE\020\001\022\024\n\020E" +
-      "VENTTYPE_UPDATE\020\002\022\024\n\020EVENTTYPE_REMOVE\020\003*" +
-      "\305\001\n\020DeviceDriverEnum\022\032\n\026DEVICEDRIVER_UND" +
-      "EFINED\020\000\022\033\n\027DEVICEDRIVER_OPENCONFIG\020\001\022\036\n" +
-      "\032DEVICEDRIVER_TRANSPORT_API\020\002\022\023\n\017DEVICED" +
-      "RIVER_P4\020\003\022&\n\"DEVICEDRIVER_IETF_NETWORK_" +
-      "TOPOLOGY\020\004\022\033\n\027DEVICEDRIVER_ONF_TR_352\020\005*" +
-      "\217\001\n\033DeviceOperationalStatusEnum\022%\n!DEVIC" +
-      "EOPERATIONALSTATUS_UNDEFINED\020\000\022$\n DEVICE" +
-      "OPERATIONALSTATUS_DISABLED\020\001\022#\n\037DEVICEOP" +
-      "ERATIONALSTATUS_ENABLED\020\002*\201\001\n\017ServiceTyp" +
-      "eEnum\022\027\n\023SERVICETYPE_UNKNOWN\020\000\022\024\n\020SERVIC" +
-      "ETYPE_L3NM\020\001\022\024\n\020SERVICETYPE_L2NM\020\002\022)\n%SE" +
-      "RVICETYPE_TAPI_CONNECTIVITY_SERVICE\020\003*\250\001" +
-      "\n\021ServiceStatusEnum\022\033\n\027SERVICESTATUS_UND" +
-      "EFINED\020\000\022\031\n\025SERVICESTATUS_PLANNED\020\001\022\030\n\024S" +
-      "ERVICESTATUS_ACTIVE\020\002\022!\n\035SERVICESTATUS_P" +
-      "ENDING_REMOVAL\020\003\022\036\n\032SERVICESTATUS_SLA_VI" +
-      "OLATED\020\004*\251\001\n\017SliceStatusEnum\022\031\n\025SLICESTA" +
-      "TUS_UNDEFINED\020\000\022\027\n\023SLICESTATUS_PLANNED\020\001" +
-      "\022\024\n\020SLICESTATUS_INIT\020\002\022\026\n\022SLICESTATUS_AC" +
-      "TIVE\020\003\022\026\n\022SLICESTATUS_DEINIT\020\004\022\034\n\030SLICES" +
-      "TATUS_SLA_VIOLATED\020\005*]\n\020ConfigActionEnum" +
-      "\022\032\n\026CONFIGACTION_UNDEFINED\020\000\022\024\n\020CONFIGAC" +
-      "TION_SET\020\001\022\027\n\023CONFIGACTION_DELETE\020\002*\203\002\n\022" +
-      "IsolationLevelEnum\022\020\n\014NO_ISOLATION\020\000\022\026\n\022" +
-      "PHYSICAL_ISOLATION\020\001\022\025\n\021LOGICAL_ISOLATIO" +
-      "N\020\002\022\025\n\021PROCESS_ISOLATION\020\003\022\035\n\031PHYSICAL_M" +
-      "EMORY_ISOLATION\020\004\022\036\n\032PHYSICAL_NETWORK_IS" +
-      "OLATION\020\005\022\036\n\032VIRTUAL_RESOURCE_ISOLATION\020" +
-      "\006\022\037\n\033NETWORK_FUNCTIONS_ISOLATION\020\007\022\025\n\021SE" +
-      "RVICE_ISOLATION\020\0102\357\022\n\016ContextService\022:\n\016" +
-      "ListContextIds\022\016.context.Empty\032\026.context" +
-      ".ContextIdList\"\000\0226\n\014ListContexts\022\016.conte" +
-      "xt.Empty\032\024.context.ContextList\"\000\0224\n\nGetC" +
-      "ontext\022\022.context.ContextId\032\020.context.Con" +
-      "text\"\000\0224\n\nSetContext\022\020.context.Context\032\022" +
-      ".context.ContextId\"\000\0225\n\rRemoveContext\022\022." +
-      "context.ContextId\032\016.context.Empty\"\000\022=\n\020G" +
-      "etContextEvents\022\016.context.Empty\032\025.contex" +
-      "t.ContextEvent\"\0000\001\022@\n\017ListTopologyIds\022\022." +
-      "context.ContextId\032\027.context.TopologyIdLi" +
-      "st\"\000\022=\n\016ListTopologies\022\022.context.Context" +
-      "Id\032\025.context.TopologyList\"\000\0227\n\013GetTopolo" +
-      "gy\022\023.context.TopologyId\032\021.context.Topolo" +
-      "gy\"\000\0227\n\013SetTopology\022\021.context.Topology\032\023" +
-      ".context.TopologyId\"\000\0227\n\016RemoveTopology\022" +
-      "\023.context.TopologyId\032\016.context.Empty\"\000\022?" +
-      "\n\021GetTopologyEvents\022\016.context.Empty\032\026.co" +
-      "ntext.TopologyEvent\"\0000\001\0228\n\rListDeviceIds" +
-      "\022\016.context.Empty\032\025.context.DeviceIdList\"" +
-      "\000\0224\n\013ListDevices\022\016.context.Empty\032\023.conte" +
-      "xt.DeviceList\"\000\0221\n\tGetDevice\022\021.context.D" +
-      "eviceId\032\017.context.Device\"\000\0221\n\tSetDevice\022" +
-      "\017.context.Device\032\021.context.DeviceId\"\000\0223\n" +
-      "\014RemoveDevice\022\021.context.DeviceId\032\016.conte" +
-      "xt.Empty\"\000\022;\n\017GetDeviceEvents\022\016.context." +
-      "Empty\032\024.context.DeviceEvent\"\0000\001\0224\n\013ListL" +
-      "inkIds\022\016.context.Empty\032\023.context.LinkIdL" +
-      "ist\"\000\0220\n\tListLinks\022\016.context.Empty\032\021.con" +
-      "text.LinkList\"\000\022+\n\007GetLink\022\017.context.Lin" +
-      "kId\032\r.context.Link\"\000\022+\n\007SetLink\022\r.contex" +
-      "t.Link\032\017.context.LinkId\"\000\022/\n\nRemoveLink\022" +
-      "\017.context.LinkId\032\016.context.Empty\"\000\0227\n\rGe" +
-      "tLinkEvents\022\016.context.Empty\032\022.context.Li" +
-      "nkEvent\"\0000\001\022>\n\016ListServiceIds\022\022.context." +
-      "ContextId\032\026.context.ServiceIdList\"\000\022:\n\014L" +
-      "istServices\022\022.context.ContextId\032\024.contex" +
-      "t.ServiceList\"\000\0224\n\nGetService\022\022.context." +
-      "ServiceId\032\020.context.Service\"\000\0224\n\nSetServ" +
-      "ice\022\020.context.Service\032\022.context.ServiceI" +
-      "d\"\000\0225\n\rRemoveService\022\022.context.ServiceId" +
-      "\032\016.context.Empty\"\000\022=\n\020GetServiceEvents\022\016" +
-      ".context.Empty\032\025.context.ServiceEvent\"\0000" +
-      "\001\022:\n\014ListSliceIds\022\022.context.ContextId\032\024." +
-      "context.SliceIdList\"\000\0226\n\nListSlices\022\022.co" +
-      "ntext.ContextId\032\022.context.SliceList\"\000\022.\n" +
-      "\010GetSlice\022\020.context.SliceId\032\016.context.Sl" +
-      "ice\"\000\022.\n\010SetSlice\022\016.context.Slice\032\020.cont" +
-      "ext.SliceId\"\000\0221\n\013RemoveSlice\022\020.context.S" +
-      "liceId\032\016.context.Empty\"\000\0229\n\016GetSliceEven" +
-      "ts\022\016.context.Empty\032\023.context.SliceEvent\"" +
-      "\0000\001\022D\n\021ListConnectionIds\022\022.context.Servi" +
-      "ceId\032\031.context.ConnectionIdList\"\000\022@\n\017Lis" +
-      "tConnections\022\022.context.ServiceId\032\027.conte" +
-      "xt.ConnectionList\"\000\022=\n\rGetConnection\022\025.c" +
-      "ontext.ConnectionId\032\023.context.Connection" +
-      "\"\000\022=\n\rSetConnection\022\023.context.Connection" +
-      "\032\025.context.ConnectionId\"\000\022;\n\020RemoveConne" +
-      "ction\022\025.context.ConnectionId\032\016.context.E" +
-      "mpty\"\000\022C\n\023GetConnectionEvents\022\016.context." +
-      "Empty\032\030.context.ConnectionEvent\"\0000\001b\006pro" +
-      "to3"
+      "us\030\006 \001(\0132\024.context.SliceStatus\022*\n\014slice_" +
+      "config\030\007 \001(\0132\024.context.SliceConfig\022(\n\013sl" +
+      "ice_owner\030\010 \001(\0132\023.context.SliceOwner\022%\n\t" +
+      "timestamp\030\t \001(\0132\022.context.Timestamp\"E\n\nS" +
+      "liceOwner\022!\n\nowner_uuid\030\001 \001(\0132\r.context." +
+      "Uuid\022\024\n\014owner_string\030\002 \001(\t\"=\n\013SliceStatu" +
+      "s\022.\n\014slice_status\030\001 \001(\0162\030.context.SliceS" +
+      "tatusEnum\"8\n\013SliceConfig\022)\n\014config_rules" +
+      "\030\001 \003(\0132\023.context.ConfigRule\"2\n\013SliceIdLi" +
+      "st\022#\n\tslice_ids\030\001 \003(\0132\020.context.SliceId\"" +
+      "+\n\tSliceList\022\036\n\006slices\030\001 \003(\0132\016.context.S" +
+      "lice\"O\n\nSliceEvent\022\035\n\005event\030\001 \001(\0132\016.cont" +
+      "ext.Event\022\"\n\010slice_id\030\002 \001(\0132\020.context.Sl" +
+      "iceId\"6\n\014ConnectionId\022&\n\017connection_uuid" +
+      "\030\001 \001(\0132\r.context.Uuid\"2\n\025ConnectionSetti" +
+      "ngs_L0\022\031\n\021lsp_symbolic_name\030\001 \001(\t\"\236\001\n\025Co" +
+      "nnectionSettings_L2\022\027\n\017src_mac_address\030\001" +
+      " \001(\t\022\027\n\017dst_mac_address\030\002 \001(\t\022\022\n\nether_t" +
+      "ype\030\003 \001(\r\022\017\n\007vlan_id\030\004 \001(\r\022\022\n\nmpls_label" +
+      "\030\005 \001(\r\022\032\n\022mpls_traffic_class\030\006 \001(\r\"t\n\025Co" +
+      "nnectionSettings_L3\022\026\n\016src_ip_address\030\001 " +
+      "\001(\t\022\026\n\016dst_ip_address\030\002 \001(\t\022\014\n\004dscp\030\003 \001(" +
+      "\r\022\020\n\010protocol\030\004 \001(\r\022\013\n\003ttl\030\005 \001(\r\"[\n\025Conn" +
+      "ectionSettings_L4\022\020\n\010src_port\030\001 \001(\r\022\020\n\010d" +
+      "st_port\030\002 \001(\r\022\021\n\ttcp_flags\030\003 \001(\r\022\013\n\003ttl\030" +
+      "\004 \001(\r\"\304\001\n\022ConnectionSettings\022*\n\002l0\030\001 \001(\013" +
+      "2\036.context.ConnectionSettings_L0\022*\n\002l2\030\002" +
+      " \001(\0132\036.context.ConnectionSettings_L2\022*\n\002" +
+      "l3\030\003 \001(\0132\036.context.ConnectionSettings_L3" +
+      "\022*\n\002l4\030\004 \001(\0132\036.context.ConnectionSetting" +
+      "s_L4\"\363\001\n\nConnection\022,\n\rconnection_id\030\001 \001" +
+      "(\0132\025.context.ConnectionId\022&\n\nservice_id\030" +
+      "\002 \001(\0132\022.context.ServiceId\0223\n\026path_hops_e" +
+      "ndpoint_ids\030\003 \003(\0132\023.context.EndPointId\022+" +
+      "\n\017sub_service_ids\030\004 \003(\0132\022.context.Servic" +
+      "eId\022-\n\010settings\030\005 \001(\0132\033.context.Connecti" +
+      "onSettings\"A\n\020ConnectionIdList\022-\n\016connec" +
+      "tion_ids\030\001 \003(\0132\025.context.ConnectionId\":\n" +
+      "\016ConnectionList\022(\n\013connections\030\001 \003(\0132\023.c" +
+      "ontext.Connection\"^\n\017ConnectionEvent\022\035\n\005" +
+      "event\030\001 \001(\0132\016.context.Event\022,\n\rconnectio" +
+      "n_id\030\002 \001(\0132\025.context.ConnectionId\"\202\001\n\nEn" +
+      "dPointId\022(\n\013topology_id\030\001 \001(\0132\023.context." +
+      "TopologyId\022$\n\tdevice_id\030\002 \001(\0132\021.context." +
+      "DeviceId\022$\n\rendpoint_uuid\030\003 \001(\0132\r.contex" +
+      "t.Uuid\"\264\001\n\010EndPoint\022(\n\013endpoint_id\030\001 \001(\013" +
+      "2\023.context.EndPointId\022\025\n\rendpoint_type\030\002" +
+      " \001(\t\0229\n\020kpi_sample_types\030\003 \003(\0162\037.kpi_sam" +
+      "ple_types.KpiSampleType\022,\n\021endpoint_loca" +
+      "tion\030\004 \001(\0132\021.context.Location\"A\n\021ConfigR" +
+      "ule_Custom\022\024\n\014resource_key\030\001 \001(\t\022\026\n\016reso" +
+      "urce_value\030\002 \001(\t\"]\n\016ConfigRule_ACL\022(\n\013en" +
+      "dpoint_id\030\001 \001(\0132\023.context.EndPointId\022!\n\010" +
+      "rule_set\030\002 \001(\0132\017.acl.AclRuleSet\"\234\001\n\nConf" +
+      "igRule\022)\n\006action\030\001 \001(\0162\031.context.ConfigA" +
+      "ctionEnum\022,\n\006custom\030\002 \001(\0132\032.context.Conf" +
+      "igRule_CustomH\000\022&\n\003acl\030\003 \001(\0132\027.context.C" +
+      "onfigRule_ACLH\000B\r\n\013config_rule\"F\n\021Constr" +
+      "aint_Custom\022\027\n\017constraint_type\030\001 \001(\t\022\030\n\020" +
+      "constraint_value\030\002 \001(\t\"E\n\023Constraint_Sch" +
+      "edule\022\027\n\017start_timestamp\030\001 \001(\002\022\025\n\rdurati" +
+      "on_days\030\002 \001(\002\"3\n\014GPS_Position\022\020\n\010latitud" +
+      "e\030\001 \001(\002\022\021\n\tlongitude\030\002 \001(\002\"W\n\010Location\022\020" +
+      "\n\006region\030\001 \001(\tH\000\022-\n\014gps_position\030\002 \001(\0132\025" +
+      ".context.GPS_PositionH\000B\n\n\010location\"l\n\033C" +
+      "onstraint_EndPointLocation\022(\n\013endpoint_i" +
+      "d\030\001 \001(\0132\023.context.EndPointId\022#\n\010location" +
+      "\030\002 \001(\0132\021.context.Location\"Y\n\033Constraint_" +
+      "EndPointPriority\022(\n\013endpoint_id\030\001 \001(\0132\023." +
+      "context.EndPointId\022\020\n\010priority\030\002 \001(\r\"0\n\026" +
+      "Constraint_SLA_Latency\022\026\n\016e2e_latency_ms" +
+      "\030\001 \001(\002\"0\n\027Constraint_SLA_Capacity\022\025\n\rcap" +
+      "acity_gbps\030\001 \001(\002\"M\n\033Constraint_SLA_Avail" +
+      "ability\022\032\n\022num_disjoint_paths\030\001 \001(\r\022\022\n\na" +
+      "ll_active\030\002 \001(\010\"V\n\036Constraint_SLA_Isolat" +
+      "ion_level\0224\n\017isolation_level\030\001 \003(\0162\033.con" +
+      "text.IsolationLevelEnum\"\366\003\n\nConstraint\022," +
+      "\n\006custom\030\001 \001(\0132\032.context.Constraint_Cust" +
+      "omH\000\0220\n\010schedule\030\002 \001(\0132\034.context.Constra" +
+      "int_ScheduleH\000\022A\n\021endpoint_location\030\003 \001(" +
+      "\0132$.context.Constraint_EndPointLocationH" +
+      "\000\022A\n\021endpoint_priority\030\004 \001(\0132$.context.C" +
+      "onstraint_EndPointPriorityH\000\0228\n\014sla_capa" +
+      "city\030\005 \001(\0132 .context.Constraint_SLA_Capa" +
+      "cityH\000\0226\n\013sla_latency\030\006 \001(\0132\037.context.Co" +
+      "nstraint_SLA_LatencyH\000\022@\n\020sla_availabili" +
+      "ty\030\007 \001(\0132$.context.Constraint_SLA_Availa" +
+      "bilityH\000\022@\n\rsla_isolation\030\010 \001(\0132\'.contex" +
+      "t.Constraint_SLA_Isolation_levelH\000B\014\n\nco" +
+      "nstraint\"^\n\022TeraFlowController\022&\n\ncontex" +
+      "t_id\030\001 \001(\0132\022.context.ContextId\022\022\n\nip_add" +
+      "ress\030\002 \001(\t\022\014\n\004port\030\003 \001(\r\"U\n\024Authenticati" +
+      "onResult\022&\n\ncontext_id\030\001 \001(\0132\022.context.C" +
+      "ontextId\022\025\n\rauthenticated\030\002 \001(\010*j\n\rEvent" +
+      "TypeEnum\022\027\n\023EVENTTYPE_UNDEFINED\020\000\022\024\n\020EVE" +
+      "NTTYPE_CREATE\020\001\022\024\n\020EVENTTYPE_UPDATE\020\002\022\024\n" +
+      "\020EVENTTYPE_REMOVE\020\003*\305\001\n\020DeviceDriverEnum" +
+      "\022\032\n\026DEVICEDRIVER_UNDEFINED\020\000\022\033\n\027DEVICEDR" +
+      "IVER_OPENCONFIG\020\001\022\036\n\032DEVICEDRIVER_TRANSP" +
+      "ORT_API\020\002\022\023\n\017DEVICEDRIVER_P4\020\003\022&\n\"DEVICE" +
+      "DRIVER_IETF_NETWORK_TOPOLOGY\020\004\022\033\n\027DEVICE" +
+      "DRIVER_ONF_TR_352\020\005*\217\001\n\033DeviceOperationa" +
+      "lStatusEnum\022%\n!DEVICEOPERATIONALSTATUS_U" +
+      "NDEFINED\020\000\022$\n DEVICEOPERATIONALSTATUS_DI" +
+      "SABLED\020\001\022#\n\037DEVICEOPERATIONALSTATUS_ENAB" +
+      "LED\020\002*\201\001\n\017ServiceTypeEnum\022\027\n\023SERVICETYPE" +
+      "_UNKNOWN\020\000\022\024\n\020SERVICETYPE_L3NM\020\001\022\024\n\020SERV" +
+      "ICETYPE_L2NM\020\002\022)\n%SERVICETYPE_TAPI_CONNE" +
+      "CTIVITY_SERVICE\020\003*\250\001\n\021ServiceStatusEnum\022" +
+      "\033\n\027SERVICESTATUS_UNDEFINED\020\000\022\031\n\025SERVICES" +
+      "TATUS_PLANNED\020\001\022\030\n\024SERVICESTATUS_ACTIVE\020" +
+      "\002\022!\n\035SERVICESTATUS_PENDING_REMOVAL\020\003\022\036\n\032" +
+      "SERVICESTATUS_SLA_VIOLATED\020\004*\251\001\n\017SliceSt" +
+      "atusEnum\022\031\n\025SLICESTATUS_UNDEFINED\020\000\022\027\n\023S" +
+      "LICESTATUS_PLANNED\020\001\022\024\n\020SLICESTATUS_INIT" +
+      "\020\002\022\026\n\022SLICESTATUS_ACTIVE\020\003\022\026\n\022SLICESTATU" +
+      "S_DEINIT\020\004\022\034\n\030SLICESTATUS_SLA_VIOLATED\020\005" +
+      "*]\n\020ConfigActionEnum\022\032\n\026CONFIGACTION_UND" +
+      "EFINED\020\000\022\024\n\020CONFIGACTION_SET\020\001\022\027\n\023CONFIG" +
+      "ACTION_DELETE\020\002*\203\002\n\022IsolationLevelEnum\022\020" +
+      "\n\014NO_ISOLATION\020\000\022\026\n\022PHYSICAL_ISOLATION\020\001" +
+      "\022\025\n\021LOGICAL_ISOLATION\020\002\022\025\n\021PROCESS_ISOLA" +
+      "TION\020\003\022\035\n\031PHYSICAL_MEMORY_ISOLATION\020\004\022\036\n" +
+      "\032PHYSICAL_NETWORK_ISOLATION\020\005\022\036\n\032VIRTUAL" +
+      "_RESOURCE_ISOLATION\020\006\022\037\n\033NETWORK_FUNCTIO" +
+      "NS_ISOLATION\020\007\022\025\n\021SERVICE_ISOLATION\020\0102\357\022" +
+      "\n\016ContextService\022:\n\016ListContextIds\022\016.con" +
+      "text.Empty\032\026.context.ContextIdList\"\000\0226\n\014" +
+      "ListContexts\022\016.context.Empty\032\024.context.C" +
+      "ontextList\"\000\0224\n\nGetContext\022\022.context.Con" +
+      "textId\032\020.context.Context\"\000\0224\n\nSetContext" +
+      "\022\020.context.Context\032\022.context.ContextId\"\000" +
+      "\0225\n\rRemoveContext\022\022.context.ContextId\032\016." +
+      "context.Empty\"\000\022=\n\020GetContextEvents\022\016.co" +
+      "ntext.Empty\032\025.context.ContextEvent\"\0000\001\022@" +
+      "\n\017ListTopologyIds\022\022.context.ContextId\032\027." +
+      "context.TopologyIdList\"\000\022=\n\016ListTopologi" +
+      "es\022\022.context.ContextId\032\025.context.Topolog" +
+      "yList\"\000\0227\n\013GetTopology\022\023.context.Topolog" +
+      "yId\032\021.context.Topology\"\000\0227\n\013SetTopology\022" +
+      "\021.context.Topology\032\023.context.TopologyId\"" +
+      "\000\0227\n\016RemoveTopology\022\023.context.TopologyId" +
+      "\032\016.context.Empty\"\000\022?\n\021GetTopologyEvents\022" +
+      "\016.context.Empty\032\026.context.TopologyEvent\"" +
+      "\0000\001\0228\n\rListDeviceIds\022\016.context.Empty\032\025.c" +
+      "ontext.DeviceIdList\"\000\0224\n\013ListDevices\022\016.c" +
+      "ontext.Empty\032\023.context.DeviceList\"\000\0221\n\tG" +
+      "etDevice\022\021.context.DeviceId\032\017.context.De" +
+      "vice\"\000\0221\n\tSetDevice\022\017.context.Device\032\021.c" +
+      "ontext.DeviceId\"\000\0223\n\014RemoveDevice\022\021.cont" +
+      "ext.DeviceId\032\016.context.Empty\"\000\022;\n\017GetDev" +
+      "iceEvents\022\016.context.Empty\032\024.context.Devi" +
+      "ceEvent\"\0000\001\0224\n\013ListLinkIds\022\016.context.Emp" +
+      "ty\032\023.context.LinkIdList\"\000\0220\n\tListLinks\022\016" +
+      ".context.Empty\032\021.context.LinkList\"\000\022+\n\007G" +
+      "etLink\022\017.context.LinkId\032\r.context.Link\"\000" +
+      "\022+\n\007SetLink\022\r.context.Link\032\017.context.Lin" +
+      "kId\"\000\022/\n\nRemoveLink\022\017.context.LinkId\032\016.c" +
+      "ontext.Empty\"\000\0227\n\rGetLinkEvents\022\016.contex" +
+      "t.Empty\032\022.context.LinkEvent\"\0000\001\022>\n\016ListS" +
+      "erviceIds\022\022.context.ContextId\032\026.context." +
+      "ServiceIdList\"\000\022:\n\014ListServices\022\022.contex" +
+      "t.ContextId\032\024.context.ServiceList\"\000\0224\n\nG" +
+      "etService\022\022.context.ServiceId\032\020.context." +
+      "Service\"\000\0224\n\nSetService\022\020.context.Servic" +
+      "e\032\022.context.ServiceId\"\000\0225\n\rRemoveService" +
+      "\022\022.context.ServiceId\032\016.context.Empty\"\000\022=" +
+      "\n\020GetServiceEvents\022\016.context.Empty\032\025.con" +
+      "text.ServiceEvent\"\0000\001\022:\n\014ListSliceIds\022\022." +
+      "context.ContextId\032\024.context.SliceIdList\"" +
+      "\000\0226\n\nListSlices\022\022.context.ContextId\032\022.co" +
+      "ntext.SliceList\"\000\022.\n\010GetSlice\022\020.context." +
+      "SliceId\032\016.context.Slice\"\000\022.\n\010SetSlice\022\016." +
+      "context.Slice\032\020.context.SliceId\"\000\0221\n\013Rem" +
+      "oveSlice\022\020.context.SliceId\032\016.context.Emp" +
+      "ty\"\000\0229\n\016GetSliceEvents\022\016.context.Empty\032\023" +
+      ".context.SliceEvent\"\0000\001\022D\n\021ListConnectio" +
+      "nIds\022\022.context.ServiceId\032\031.context.Conne" +
+      "ctionIdList\"\000\022@\n\017ListConnections\022\022.conte" +
+      "xt.ServiceId\032\027.context.ConnectionList\"\000\022" +
+      "=\n\rGetConnection\022\025.context.ConnectionId\032" +
+      "\023.context.Connection\"\000\022=\n\rSetConnection\022" +
+      "\023.context.Connection\032\025.context.Connectio" +
+      "nId\"\000\022;\n\020RemoveConnection\022\025.context.Conn" +
+      "ectionId\032\016.context.Empty\"\000\022C\n\023GetConnect" +
+      "ionEvents\022\016.context.Empty\032\030.context.Conn" +
+      "ectionEvent\"\0000\001b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -60291,7 +62415,7 @@ public final class ContextOuterClass {
     internal_static_context_Slice_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Slice_descriptor,
-        new java.lang.String[] { "SliceId", "SliceEndpointIds", "SliceConstraints", "SliceServiceIds", "SliceSubsliceIds", "SliceStatus", "SliceOwner", "Timestamp", });
+        new java.lang.String[] { "SliceId", "SliceEndpointIds", "SliceConstraints", "SliceServiceIds", "SliceSubsliceIds", "SliceStatus", "SliceConfig", "SliceOwner", "Timestamp", });
     internal_static_context_SliceOwner_descriptor =
       getDescriptor().getMessageTypes().get(34);
     internal_static_context_SliceOwner_fieldAccessorTable = new
@@ -60304,182 +62428,194 @@ public final class ContextOuterClass {
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_SliceStatus_descriptor,
         new java.lang.String[] { "SliceStatus", });
-    internal_static_context_SliceIdList_descriptor =
+    internal_static_context_SliceConfig_descriptor =
       getDescriptor().getMessageTypes().get(36);
+    internal_static_context_SliceConfig_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_SliceConfig_descriptor,
+        new java.lang.String[] { "ConfigRules", });
+    internal_static_context_SliceIdList_descriptor =
+      getDescriptor().getMessageTypes().get(37);
     internal_static_context_SliceIdList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_SliceIdList_descriptor,
         new java.lang.String[] { "SliceIds", });
     internal_static_context_SliceList_descriptor =
-      getDescriptor().getMessageTypes().get(37);
+      getDescriptor().getMessageTypes().get(38);
     internal_static_context_SliceList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_SliceList_descriptor,
         new java.lang.String[] { "Slices", });
     internal_static_context_SliceEvent_descriptor =
-      getDescriptor().getMessageTypes().get(38);
+      getDescriptor().getMessageTypes().get(39);
     internal_static_context_SliceEvent_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_SliceEvent_descriptor,
         new java.lang.String[] { "Event", "SliceId", });
     internal_static_context_ConnectionId_descriptor =
-      getDescriptor().getMessageTypes().get(39);
+      getDescriptor().getMessageTypes().get(40);
     internal_static_context_ConnectionId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionId_descriptor,
         new java.lang.String[] { "ConnectionUuid", });
     internal_static_context_ConnectionSettings_L0_descriptor =
-      getDescriptor().getMessageTypes().get(40);
+      getDescriptor().getMessageTypes().get(41);
     internal_static_context_ConnectionSettings_L0_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionSettings_L0_descriptor,
         new java.lang.String[] { "LspSymbolicName", });
     internal_static_context_ConnectionSettings_L2_descriptor =
-      getDescriptor().getMessageTypes().get(41);
+      getDescriptor().getMessageTypes().get(42);
     internal_static_context_ConnectionSettings_L2_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionSettings_L2_descriptor,
         new java.lang.String[] { "SrcMacAddress", "DstMacAddress", "EtherType", "VlanId", "MplsLabel", "MplsTrafficClass", });
     internal_static_context_ConnectionSettings_L3_descriptor =
-      getDescriptor().getMessageTypes().get(42);
+      getDescriptor().getMessageTypes().get(43);
     internal_static_context_ConnectionSettings_L3_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionSettings_L3_descriptor,
         new java.lang.String[] { "SrcIpAddress", "DstIpAddress", "Dscp", "Protocol", "Ttl", });
     internal_static_context_ConnectionSettings_L4_descriptor =
-      getDescriptor().getMessageTypes().get(43);
+      getDescriptor().getMessageTypes().get(44);
     internal_static_context_ConnectionSettings_L4_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionSettings_L4_descriptor,
         new java.lang.String[] { "SrcPort", "DstPort", "TcpFlags", "Ttl", });
     internal_static_context_ConnectionSettings_descriptor =
-      getDescriptor().getMessageTypes().get(44);
+      getDescriptor().getMessageTypes().get(45);
     internal_static_context_ConnectionSettings_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionSettings_descriptor,
         new java.lang.String[] { "L0", "L2", "L3", "L4", });
     internal_static_context_Connection_descriptor =
-      getDescriptor().getMessageTypes().get(45);
+      getDescriptor().getMessageTypes().get(46);
     internal_static_context_Connection_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Connection_descriptor,
         new java.lang.String[] { "ConnectionId", "ServiceId", "PathHopsEndpointIds", "SubServiceIds", "Settings", });
     internal_static_context_ConnectionIdList_descriptor =
-      getDescriptor().getMessageTypes().get(46);
+      getDescriptor().getMessageTypes().get(47);
     internal_static_context_ConnectionIdList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionIdList_descriptor,
         new java.lang.String[] { "ConnectionIds", });
     internal_static_context_ConnectionList_descriptor =
-      getDescriptor().getMessageTypes().get(47);
+      getDescriptor().getMessageTypes().get(48);
     internal_static_context_ConnectionList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionList_descriptor,
         new java.lang.String[] { "Connections", });
     internal_static_context_ConnectionEvent_descriptor =
-      getDescriptor().getMessageTypes().get(48);
+      getDescriptor().getMessageTypes().get(49);
     internal_static_context_ConnectionEvent_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionEvent_descriptor,
         new java.lang.String[] { "Event", "ConnectionId", });
     internal_static_context_EndPointId_descriptor =
-      getDescriptor().getMessageTypes().get(49);
+      getDescriptor().getMessageTypes().get(50);
     internal_static_context_EndPointId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_EndPointId_descriptor,
         new java.lang.String[] { "TopologyId", "DeviceId", "EndpointUuid", });
     internal_static_context_EndPoint_descriptor =
-      getDescriptor().getMessageTypes().get(50);
+      getDescriptor().getMessageTypes().get(51);
     internal_static_context_EndPoint_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_EndPoint_descriptor,
         new java.lang.String[] { "EndpointId", "EndpointType", "KpiSampleTypes", "EndpointLocation", });
     internal_static_context_ConfigRule_Custom_descriptor =
-      getDescriptor().getMessageTypes().get(51);
+      getDescriptor().getMessageTypes().get(52);
     internal_static_context_ConfigRule_Custom_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConfigRule_Custom_descriptor,
         new java.lang.String[] { "ResourceKey", "ResourceValue", });
     internal_static_context_ConfigRule_ACL_descriptor =
-      getDescriptor().getMessageTypes().get(52);
+      getDescriptor().getMessageTypes().get(53);
     internal_static_context_ConfigRule_ACL_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConfigRule_ACL_descriptor,
         new java.lang.String[] { "EndpointId", "RuleSet", });
     internal_static_context_ConfigRule_descriptor =
-      getDescriptor().getMessageTypes().get(53);
+      getDescriptor().getMessageTypes().get(54);
     internal_static_context_ConfigRule_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConfigRule_descriptor,
         new java.lang.String[] { "Action", "Custom", "Acl", "ConfigRule", });
     internal_static_context_Constraint_Custom_descriptor =
-      getDescriptor().getMessageTypes().get(54);
+      getDescriptor().getMessageTypes().get(55);
     internal_static_context_Constraint_Custom_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_Custom_descriptor,
         new java.lang.String[] { "ConstraintType", "ConstraintValue", });
     internal_static_context_Constraint_Schedule_descriptor =
-      getDescriptor().getMessageTypes().get(55);
+      getDescriptor().getMessageTypes().get(56);
     internal_static_context_Constraint_Schedule_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_Schedule_descriptor,
         new java.lang.String[] { "StartTimestamp", "DurationDays", });
     internal_static_context_GPS_Position_descriptor =
-      getDescriptor().getMessageTypes().get(56);
+      getDescriptor().getMessageTypes().get(57);
     internal_static_context_GPS_Position_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_GPS_Position_descriptor,
         new java.lang.String[] { "Latitude", "Longitude", });
     internal_static_context_Location_descriptor =
-      getDescriptor().getMessageTypes().get(57);
+      getDescriptor().getMessageTypes().get(58);
     internal_static_context_Location_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Location_descriptor,
         new java.lang.String[] { "Region", "GpsPosition", "Location", });
     internal_static_context_Constraint_EndPointLocation_descriptor =
-      getDescriptor().getMessageTypes().get(58);
+      getDescriptor().getMessageTypes().get(59);
     internal_static_context_Constraint_EndPointLocation_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_EndPointLocation_descriptor,
         new java.lang.String[] { "EndpointId", "Location", });
+    internal_static_context_Constraint_EndPointPriority_descriptor =
+      getDescriptor().getMessageTypes().get(60);
+    internal_static_context_Constraint_EndPointPriority_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Constraint_EndPointPriority_descriptor,
+        new java.lang.String[] { "EndpointId", "Priority", });
     internal_static_context_Constraint_SLA_Latency_descriptor =
-      getDescriptor().getMessageTypes().get(59);
+      getDescriptor().getMessageTypes().get(61);
     internal_static_context_Constraint_SLA_Latency_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_SLA_Latency_descriptor,
         new java.lang.String[] { "E2ELatencyMs", });
     internal_static_context_Constraint_SLA_Capacity_descriptor =
-      getDescriptor().getMessageTypes().get(60);
+      getDescriptor().getMessageTypes().get(62);
     internal_static_context_Constraint_SLA_Capacity_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_SLA_Capacity_descriptor,
         new java.lang.String[] { "CapacityGbps", });
     internal_static_context_Constraint_SLA_Availability_descriptor =
-      getDescriptor().getMessageTypes().get(61);
+      getDescriptor().getMessageTypes().get(63);
     internal_static_context_Constraint_SLA_Availability_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_SLA_Availability_descriptor,
         new java.lang.String[] { "NumDisjointPaths", "AllActive", });
     internal_static_context_Constraint_SLA_Isolation_level_descriptor =
-      getDescriptor().getMessageTypes().get(62);
+      getDescriptor().getMessageTypes().get(64);
     internal_static_context_Constraint_SLA_Isolation_level_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_SLA_Isolation_level_descriptor,
         new java.lang.String[] { "IsolationLevel", });
     internal_static_context_Constraint_descriptor =
-      getDescriptor().getMessageTypes().get(63);
+      getDescriptor().getMessageTypes().get(65);
     internal_static_context_Constraint_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_descriptor,
-        new java.lang.String[] { "Custom", "Schedule", "EndpointLocation", "SlaCapacity", "SlaLatency", "SlaAvailability", "SlaIsolation", "Constraint", });
+        new java.lang.String[] { "Custom", "Schedule", "EndpointLocation", "EndpointPriority", "SlaCapacity", "SlaLatency", "SlaAvailability", "SlaIsolation", "Constraint", });
     internal_static_context_TeraFlowController_descriptor =
-      getDescriptor().getMessageTypes().get(64);
+      getDescriptor().getMessageTypes().get(66);
     internal_static_context_TeraFlowController_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_TeraFlowController_descriptor,
         new java.lang.String[] { "ContextId", "IpAddress", "Port", });
     internal_static_context_AuthenticationResult_descriptor =
-      getDescriptor().getMessageTypes().get(65);
+      getDescriptor().getMessageTypes().get(67);
     internal_static_context_AuthenticationResult_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_AuthenticationResult_descriptor,
diff --git a/src/policy/target/kubernetes/kubernetes.yml b/src/policy/target/kubernetes/kubernetes.yml
index b3313f771654e02f80bb7e4cadf68476afcadc75..680929bc031df90594a743eb96316d3c99508cef 100644
--- a/src/policy/target/kubernetes/kubernetes.yml
+++ b/src/policy/target/kubernetes/kubernetes.yml
@@ -3,17 +3,14 @@ apiVersion: v1
 kind: Service
 metadata:
   annotations:
-    app.quarkus.io/commit-id: a25756b932a3146d95a993cf529e26e48654455e
-    app.quarkus.io/build-timestamp: 2022-08-01 - 12:51:14 +0000
+    app.quarkus.io/commit-id: 7d24cfdf286fcca1ff04620ee026933bedd8960e
+    app.quarkus.io/build-timestamp: 2022-08-04 - 22:13:18 +0000
   labels:
     app.kubernetes.io/name: policyservice
     app: policyservice
   name: policyservice
 spec:
   ports:
-    - name: grpc-server
-      port: 6060
-      targetPort: 6060
     - name: http
       port: 8080
       targetPort: 8080
@@ -28,8 +25,8 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   annotations:
-    app.quarkus.io/commit-id: a25756b932a3146d95a993cf529e26e48654455e
-    app.quarkus.io/build-timestamp: 2022-08-01 - 12:51:14 +0000
+    app.quarkus.io/commit-id: 7d24cfdf286fcca1ff04620ee026933bedd8960e
+    app.quarkus.io/build-timestamp: 2022-08-04 - 22:13:18 +0000
   labels:
     app: policyservice
     app.kubernetes.io/name: policyservice
@@ -42,8 +39,8 @@ spec:
   template:
     metadata:
       annotations:
-        app.quarkus.io/commit-id: a25756b932a3146d95a993cf529e26e48654455e
-        app.quarkus.io/build-timestamp: 2022-08-01 - 12:51:14 +0000
+        app.quarkus.io/commit-id: 7d24cfdf286fcca1ff04620ee026933bedd8960e
+        app.quarkus.io/build-timestamp: 2022-08-04 - 22:13:18 +0000
       labels:
         app: policyservice
         app.kubernetes.io/name: policyservice
@@ -54,12 +51,12 @@ spec:
               valueFrom:
                 fieldRef:
                   fieldPath: metadata.namespace
-            - name: MONITORING_SERVICE_HOST
-              value: monitoringservice
-            - name: SERVICE_SERVICE_HOST
-              value: serviceservice
             - name: CONTEXT_SERVICE_HOST
               value: contextservice
+            - name: SERVICE_SERVICE_HOST
+              value: serviceservice
+            - name: MONITORING_SERVICE_HOST
+              value: monitoringservice
           image: registry.gitlab.com/teraflow-h2020/controller/policy:0.1.0
           imagePullPolicy: Always
           livenessProbe:
@@ -74,9 +71,6 @@ spec:
             timeoutSeconds: 10
           name: policyservice
           ports:
-            - containerPort: 6060
-              name: grpc-server
-              protocol: TCP
             - containerPort: 8080
               name: http
               protocol: TCP
diff --git a/tutorial/1-1-1-create-vm-oracle-virtualbox.md b/tutorial/1-1-1-create-vm-oracle-virtualbox.md
index c53601e145d4ad0ca41c55803c27d55309070231..ea0da6cabfa46ba2c16166b07cc8c6e345da2246 100644
--- a/tutorial/1-1-1-create-vm-oracle-virtualbox.md
+++ b/tutorial/1-1-1-create-vm-oracle-virtualbox.md
@@ -26,7 +26,8 @@ __Note__: IP address 10.0.2.10 is the one that will be assigned to the VM.
 - RAM: 8 GB
 - Disk: 40 GB, Virtual Disk Image (VDI), Dynamically allocated
 - Optical Drive ISO Image: "ubuntu-20.04.4-live-server-amd64.iso"
-  (from [Ubuntu Server 20.04 LTS](https://releases.ubuntu.com/20.04/))
+  - Download the file "ubuntu-20.04.4-live-server-amd64.iso" from [Ubuntu 20.04 LTS](https://releases.ubuntu.com/20.04/).
+  - __Note__: use Ubuntu Server image instead of Ubuntu Desktop to create a lightweight VM.
 - Network Adapter 1 (*): enabled, attached to NAT Network "TFS-NAT-Net"
 - Minor adjustments (*):
   - Audio: disabled